上記の件ですが、書きこみの際のどういう意味でしょうか?


hift-JISコードの0x8740~0x879C 0xed40~0xeefc 0xfa40~0xfc4b

A 回答 (1件)

質問の意味がよく分かりませんが、その範囲は機種異存文字ですね。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q文字コードチェックについて

文字コードのチェックについて質問です。

検索した所、下記の質問で同じような質問がでていたので参考に作ってみたのですが
java.lang.ArrayIndexOutOfBoundsException
になってしまい動作しません。
charに変換するときに2byte使う条件が違っているのだと思うのですがよくわかりませんでした。
http://okwave.jp/qa1754723.html
↑参考にした質問

入力された文字に対象となる文字コードが含まれているかをUnicodeではなくてSJISのコードで調べたいのですがどうすればよいか教えてくれませんか?
うまく動作しなかったのは下記のコードです。
引数で与えられた文字列にSJISの8740~879c、ed40~effc、fa40~fc4b(機種依存文字と外字)
が含まれていたらエラーにするようなメソッドです。

---
private boolean checkChar(String target) {
byte charArray[] = charArray = target.getBytes("MS932");
for (int i = 0; i < charArray.length; i++) {
byte charByte = charArray[i];
char targetChar;
if (charByte >= 128) {
targetChar = (char) charByte;
} else {
targetChar = (char) (charByte * 0x100 + charArray[i + 1]);
i++;
}
if (0x8740 <= targetChar && targetChar <= 0x879c) {
// エラー処理
return false;
}
if (0xed40 <= targetChar && targetChar <= 0xeffc) {
// エラー処理
return false;
}
if(0xfa40 <= targetChar && targetChar <= 0xec4b) {
// エラー処理
return false;
}
}
return true;
}
---

文字コードのチェックについて質問です。

検索した所、下記の質問で同じような質問がでていたので参考に作ってみたのですが
java.lang.ArrayIndexOutOfBoundsException
になってしまい動作しません。
charに変換するときに2byte使う条件が違っているのだと思うのですがよくわかりませんでした。
http://okwave.jp/qa1754723.html
↑参考にした質問

入力された文字に対象となる文字コードが含まれているかをUnicodeではなくてSJISのコードで調べたいのですがどうすればよいか教えてくれませんか?
うま...続きを読む

Aベストアンサー

Java はあまり使ってないので間違っているかもしれませんが…

Java の byte は符号付で文字コード範囲を比較する際に扱いにくいので,

> byte charByte = charArray[i];

とするよりも,

int charByte = charArray[i] & 0xFF;

とする方がいいと思います.


// charByte が SJIS 2バイト文字の第1バイトのときそのときに限り真を返す.
private static boolean isLeadByte(int charByte)
{
  return ((0x81 <= charByte) && (charByte <= 0x9F)) ||
         ((0xE0 <= charByte) && (charByte <= 0xFC));
}

// charByte が SJIS 2バイト文字の第2バイトのときそのときに限り真を返す.
private static boolean isTrailByte(int charByte)
{
  return (0x40 <= charByte) && (charByte <= 0xFC) && (charByte != 0x7F);
}

private boolean checkChar(String target) {
  byte charArray[] = charArray = target.getBytes("MS932");
  for(int i = 0; i < charArray.length; i++) {
    int charByte = charArray[i] & 0xFF;
    int charByte2, targetChar;

    if(isLeadByte(charByte)) {
      // charByte が2バイト文字の第1バイトの場合
      if(++i >= charArray.length) {
        // 第2バイトが存在しない場合:エラー
        return false;
      }
      charByte2 = charArray[i] & 0xFF;
      if(!isTrailByte(charByte2)) {
        // 第2バイトが不正:エラー
        return false;
      }
      targetChar = (charByte << 8) | charByte2;

      if((0x8740 <= targetChar) && (targetChar <= 0x879E)) {
        // 13区 (NEC特殊文字の場合):エラー
        return false;
      }
      if((0xED40 <= targetChar) && (targetChar <= 0xEFFC)) {
        // 89~92区 (NEC選定IBM拡張文字) の場合:エラー
        return false;
      }
      if((0xFA40 <= targetChar) && ((targetChar <= 0xEC4B)) {
        // 115~119区 (IBM拡張文字) の場合:エラー
        return false;
      }
    }
  }
  return true;
}

でどうでしょうか? (コンパイルは通してません.)


あと,

> SJISの8740~879c、ed40~effc、fa40~fc4b(機種依存文字と外字)

そのコード範囲は機種依存文字ばかりで外字は含まれていません.
ユーザ定義外字は95~114区 (0xF040~0xF9FC) です.

Mac ユーザも対象に含めるならば,9~14区 (0x8540~0x889E) も
機種依存文字です.

余計なお世話かもしれませんが,上記の範囲に限らず,シフト JIS の
コード範囲のうち JIS X 0208 で未定義の部分はすべて禁止にした方が
いいんじゃないでしょうか?

・JIS X 0208 で未定義の範囲 (主なものだけ)
9~15区 (0x8540 ~ 0x889E)
85~120区 (0xEB40 ~ 0xFCFC)


Shift_JIS
http://ja.wikipedia.org/wiki/Shift_JIS

Microsoftコードページ932 (Windows版シフトJIS)
http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932

MacJapanese (Mac版シフトJIS)
http://ja.wikipedia.org/wiki/MacJapanese

Java はあまり使ってないので間違っているかもしれませんが…

Java の byte は符号付で文字コード範囲を比較する際に扱いにくいので,

> byte charByte = charArray[i];

とするよりも,

int charByte = charArray[i] & 0xFF;

とする方がいいと思います.


// charByte が SJIS 2バイト文字の第1バイトのときそのときに限り真を返す.
private static boolean isLeadByte(int charByte)
{
  return ((0x81 <= charByte) && (charByte <= 0x9F)) ||
         ((0xE0 <= charByte...続きを読む

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

QChr(13)とChr(10)の違いは?

myStr = Replace(myStr, Chr(13), "")

myStr = Replace(myStr, Chr(10), "")

で、改行を置換しているのですが、どちらかでも改行できる時や
どちらかじゃないと改行できない時があります。

そもそもChr(13)とChr(10)の違いはなんでしょう?
どちらも改行ですよね?
何が違うのでしょう?

Aベストアンサー

こんにちは。お邪魔します。

Chr(10) ・・・ ラインフィード ・・・ 略して、Lf

Chr(13) ・・・ キャリッジリターン ・・・ 略して、Cr

改行文字に何を使うのかはアプリケーションが規定するものです。

Win・Office環境では
上のふたつを組合わせた改行[CrLf]を使うことが多いと思います。
次に[Lf]、そして、[Cr]

なので、ソースによっては
  myStr = Replace(myStr, vbCrLf, "")
と、一発で置換できるケースも少なくないです。
■ソースごとに改行文字を確認しておくことから始めた方が有利になります。■

ひとまず、VBAでの改行の扱いに慣れるには
■VBAで用意された文字列定数について知っておいた方がよいと思います。■
 VBE(Visual Basicの編集画面)が開いている状態で、
 F2 キー → オブジェクトブラウザー起動
 検索小窓に、vbCrLf、とタイプして、検索ボタン
 VBA.Constantsクラスのメンバーが表示され
 その中にすべての改行文字(文字列定数)が含まれています。
 そのまま、F1 キーでヘルプを表示します。
詳しい説明はヘルプを読む方がいいでしょう。

実践的な話として、
Chr(10)やChr(13)は関数の戻り値です。
対して、
vbLfやvbCr(またはvbCrLf)は定数です。
定数で済ませられるなら、定数の方が何かと有利です。
定数の名前は略号ですから、実態をイメージし易くなっています。
定数の扱いに慣れることをお奨めします。
例)
  myStr = Replace(myStr, vbLf, "")
  myStr = Replace(myStr, vbCr, "")
  myStr = Replace(myStr, vbCrLf, "")

もしも文字列定数を先に覚えていたなら、疑問にもならなかったのかも知れませんね。
私の場合は、改行の何たるかを覚える前に文字列定数覚えていて、困ることありませんでしたから。

以上、ご参考まで。

こんにちは。お邪魔します。

Chr(10) ・・・ ラインフィード ・・・ 略して、Lf

Chr(13) ・・・ キャリッジリターン ・・・ 略して、Cr

改行文字に何を使うのかはアプリケーションが規定するものです。

Win・Office環境では
上のふたつを組合わせた改行[CrLf]を使うことが多いと思います。
次に[Lf]、そして、[Cr]

なので、ソースによっては
  myStr = Replace(myStr, vbCrLf, "")
と、一発で置換できるケースも少なくないです。
■ソースごとに改行文字を確認しておくことから始めた方が有利...続きを読む

Qimportについて

こんばんは。

exportしたダンプファイルを頂いたので
oracleにimportしようと思っています。
色々調べて以下のようにわかったのですが、
間違っていないか、パラメータで追加した方が
よいものがあれば、ご指摘お願いします。

1)
既に同じ内容のテーブルが存在するが、それは気にせずimportを行う。既存のテーブルデータは新しくimportするもので更新されている???

2)
SQL*PLUSでコマンドを叩く。
コマンド内容は以下の通り。
imp system/manager fromuser=test1 touser=test2 file=db_data.dmp log=implog.log

test1 ← DBA権限あり。
test2 ← このユーザーの表領域にデータを作成したい。

Aベストアンサー

>上記オプションで、既存のテーブルは古いデータが削除され、

ignore=yにしてもimpコマンドではデータの削除は行われません。
一意制約違反となります。
あらかじめ不要なデータは消しておきましょう。

truncate table テーブル名;
でデータを切り捨てるのがいいかと。


>新規に増えたテーブルは
>新規に作成(データ込み)と考えて正しいでしょうか?

はい。こちらはこうです。

Q2つのテーブルから条件に一致しないデータ抽出

2つのテーブルから条件に一致しない行のみ抜き出しCSV
か他のテーブルに抜き出す処理を作ろうと思っています。

そこで質問なのですが、以下の2つのテーブルから
条件に一致しないコードのみ抜き出すSQL文などありますか?

-----------------------------------------
マスターテーブル
コード、ネーム1、ネーム2、店コード
1、あ、い、6
2、う、え、8
3、お、か、4
4、き、く、2


店コードテーブル
店コード、店区分
1、スーパー
2、コンビニ
3、デパート
4、ホームセンター
------------------------------------------

条件は、マスターテーブルの店コードが店コードテーブルに存在
しないデータのみ抽出です。

抽出結果は、以下の様にしたいです。
1、あ、い、6
2、う、え、8

このような考え大丈夫でしょうか?
SELECT *
FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S
ON M.店コード = S.店コード

わかりずらい質問ですがよろしくお願いします。

2つのテーブルから条件に一致しない行のみ抜き出しCSV
か他のテーブルに抜き出す処理を作ろうと思っています。

そこで質問なのですが、以下の2つのテーブルから
条件に一致しないコードのみ抜き出すSQL文などありますか?

-----------------------------------------
マスターテーブル
コード、ネーム1、ネーム2、店コード
1、あ、い、6
2、う、え、8
3、お、か、4
4、き、く、2


店コードテーブル
店コード、店区分
1、スーパー
2、コンビニ
3、デパート
4、ホームセンタ...続きを読む

Aベストアンサー

このような考え大丈夫でしょうか?
SELECT *
FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S
ON M.店コード = S.店コード

店コードが一致するレコードを抽出しているのですね。
はい、大丈夫です。
もっとも単純に、分かりやすい式を書くのであれば

この条件否定なので
left outer join で結合して、結合できなかったデータ、
つまり、店がNullのデータを取れば抽出できます。

SELECT *
FROM マスターテーブル AS M left outer join 店コードテーブル AS S
ON M.店コード = S.店コード
where S.店コード is null

または、
SELECT *
FROM マスターテーブル as M
where M.店コード not in ( select 店コード from 店コードテーブル)

等でいけるでしょう。

ただ、参考URLにもありますように、
is null とか not in は遅いです。(Indexで見れなくなるので)
大量データを扱うような場合や、速度が求められるような場合は
別途クエリを検討しましょう。

参考URL:http://www.geocities.jp/mickindex/database/db_optimize.html

このような考え大丈夫でしょうか?
SELECT *
FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S
ON M.店コード = S.店コード

店コードが一致するレコードを抽出しているのですね。
はい、大丈夫です。
もっとも単純に、分かりやすい式を書くのであれば

この条件否定なので
left outer join で結合して、結合できなかったデータ、
つまり、店がNullのデータを取れば抽出できます。

SELECT *
FROM マスターテーブル AS M left outer join 店コードテーブル AS S
ON M.店コード = S....続きを読む


人気Q&Aランキング

おすすめ情報