最近のJavascriptにおける
「1バイト文字も2バイト文字も一文字として判断する」
という特性を利用して、外字文字列のコードを抽出したいのですが…

対象としたいテキスト文字数が80万字ほどあり(^^;、
この量をTEXTAREAへpasteしてJavascriptで一気に処理できるか?
という点を知りたいのです。
まだテキストが手元にないので試せないのですが、
知識としてでも知ってる方がいたらお教え下さい。

ブラウザ環境はIE5.0+Winです。

要するにcsvテキストからシフトJISの0xF040~FFFCを含む行数を
抽出したいだけなので、perlで簡単な方法があればかまわないのですが…

このQ&Aに関連する最新のQ&A

A 回答 (3件)

さすがに80万文字っていうのは無理じゃないでしょうか。

分割するにしても、いろいろと面倒そうですし、ご自分でも指摘していらっしゃるように、perlで簡単なスクリプトを作るのが現実的だと思います。

アルゴリズムとしては、
1. 1byte読み込む
2. ~0x7f、または0xa1~0xdfなら、1.へ
3. 0xf0~0xffなら、外字用処理を行った後、1.へ
4. それ以外なら、1byteカラ読みして、1.へ
でいいでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

やはりperlですか。
「\」処理など変なミスがあると余計なロスが出そうで…
とりあえずそれで試してみます。

お礼日時:2001/02/14 15:17

 補足みました。



 NNは2バイト文字を1文字としては扱いません(^_^; これはIEだけの仕様です。
 IEは内部でUNICODEを使用しており、全角半角に関わらずすべての文字を2バイトコードとして扱っています。これが、全角と半角を両方とも1文字として扱える正体です。
 NNは内部でUNICODEを使用していないので、2バイト文字は飽くまで2文字なのです。
 ま、NNは使わないということであれば関係ないですね。

 ちなみにもうプログラムはJavaScriptで書かれたのでしょうか。 処理重くないですか?

この回答への補足

プログラムは「桐」というDBソフトに
外字検出関数という便利なモノがあったのでそれを使うことになりました(^^;

NNの話ですが、4.75では

a = "あああ".length;

としたときに「3」と返します。
ちなみに4.01では「6」です。さらに、

A = "庁".charCodeAt(0);

などとしたときも、4.75ではIEと同じく「24193」と表示します。
ちなみにNN4.01では「-110」と表示されます。

NNはバージョンによって2バイト文字の判定が違うと思います。

補足日時:2001/02/15 14:25
    • good
    • 0

 えーとですね。


 2バイト文字を1文字として数えるのはIEが昔からやってきたことで、NNでは逆に今でも2バイト文字は2文字です。
 ですのでJavaScriptでやるのであればその辺の区分けが必要です。

 Perl でできるんだったら Perl の方が簡単ですよ(^_^; わざわざ苦労することもないです。IEとNNの区分けも面倒ですし。

 Perl では、文字列をシフトJISに変換したのち、

  if ( $st =~ /([\xF0-\xFF][\x40-\xFC])/ )

 おそらくはこれで、文字列$stの中に外字が含まれているかどうかが判別できるはずです。上記のif文では、$st に外字が含まれていればtrueを、そうでなければfalseを返します。
 たしか。
 正規表現はあんまし使わないので自信はないです。何度かテストしてみてください。

この回答への補足

回答ありがとうございます。
Javascriptの実行はIEで行い、公開する類のものではないので大丈夫です。
最近のNN(4.75)では2バイト文字は一文字と数えていた気がするのですが…
関数によって違うのかもしれません。
HTMLのINPUT MAXLENGTHは相変わらず2バイト文字=2文字ですが。

補足日時:2001/02/14 15:18
    • good
    • 0

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

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

QJavascriptテキストの値で表示文字を変更

Javascript初心者です。テキストに入力された数字(1~7)をもとに、そのテキストボックスの横に文字を表示させたいです。(1なら「非常にあてはまる」、2なら「ややあてはまる」・・・等)
且つ、1つのHTML内にそのテキストボックスが50個あります。。
それぞれ個別に文字を表示させたいのですが、簡易に記述する方法はありますでしょうか。
同様の質問を拝見しましたが、テキストの値で且つ複数が同一ページで挙動できる方法を見つけることができませんでした。お分かりになる方ご教示いただけますと大変助かります。
よろしくお願いいたします。

Aベストアンサー

addEventListener ('DOMMouseScroll', function (event) {
 var e = event.target, no;

 if ('SELECT' === e.nodeName)
  if ('select-one' === e.type)
   if (-1 < (no = e.selectedIndex - (0 < event.detail ? 1: -1)))
    if (no < e.options.length)
     e.selectedIndex = no;
}, false);

ふぁいあ~ふぉっくすなら

QJavaScriptを使用してマルチラインテキストフィールドでの文字制限をする方法について

web creators 2006年2月号 (vol.50)の89ページに
JavaScriptを使用してマルチラインテキストフィールドでの
文字制限をする方法について書いてあったのでやってみたのですが動作しません。
ソースは下記のとおりに書いたのですが私のやり方が
おかしいのかソースがおかしいのかがわかりません。

使用しているOSはWindows XP ブラウザはIE6 SP2 です。
JavaScriptがオフになっていないことは確認済みです。
ご存知の方がおられましたらご回答をよろしくお願いします。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<title>無題ドキュメント</title>
<script type="text/javascript">
function checkLen(){
     IngM = 100;
     strT = document.txtbox.textfield.value;
     IngL = strT.length;
     if( IngL > IngM ){
     alert( "制限文字数" +IngM+ "文字を超えています。" );
     document.txtbox.textfield.innerText = strT.substring( 0, IngM );
     }
}
</script>
</head>
<body>
<textarea name="txtbox" cols="50" rows="5" onBlur="checkLen()"></textarea>
</body>
</html>

web creators 2006年2月号 (vol.50)の89ページに
JavaScriptを使用してマルチラインテキストフィールドでの
文字制限をする方法について書いてあったのでやってみたのですが動作しません。
ソースは下記のとおりに書いたのですが私のやり方が
おかしいのかソースがおかしいのかがわかりません。

使用しているOSはWindows XP ブラウザはIE6 SP2 です。
JavaScriptがオフになっていないことは確認済みです。
ご存知の方がおられましたらご回答をよろしくお願いします。

<!DOCTYPE HTML PUBLIC "-//W3C...続きを読む

Aベストアンサー

入力値を取得する部分を
 strT = document.all.txtbox.value;
のように修正すればOKです。

QJavascriptで文字列から、任意の文字を抽出したい。

Javascriptで文字列から、任意の文字を抽出したい。

下記のような、グーグルストリートビューの貼り付けコードがあります。
「htp://maps.google.co.jp/maps?f=q&hl=ja&ie=UTF8&om=1&layer=c&ll=35.659406,139.744742
&spn=0,0.019205&z=16&brcurrent=3,0x60188bbd9a93fb75:0x34e0de0018b3269,1
&cbll=35.659362,139.744854&panoid=-o46OC9WbmlXHKjOyLWB8Q
&cbp=12,159.95,,0,-38.84」

※先頭のhttpは、htpにしてあります。

この文字列の中から、
35.659362(2番目に出てくる北緯)
139.744854(2番目に出てくる東経)
159.95
-38.84
の、4つの部分の数字をそれぞれ抽出したいのですが、
Javascriptで可能でしょうか。
各数値の桁数は変わる場合があります。

宜しく、お願いします。

Aベストアンサー

はりつけるまえですよね、その2
ぜんかくくうはくは、はんかくにしてね。

var getQuery = function (querys) {
 var result = { };
 var i = 0
 var query;
 var nv;

 querys = querys.split ('&');

 while ((query = querys[i++])) {
  nv = query.split ('=');
  result[ decodeURIComponent (nv[0]) ] = decodeURIComponent (nv[1]);
 }

 return result;
};

var locationSplit = function (url) {
 return /^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/.exec(url);
};

var str =
 'htp://maps.google.co.jp/maps?f=q&hl=ja&ie=UTF8&om=1&layer=c&ll=35.659406,139.744742' +
 '&spn=0,0.019205&z=16&brcurrent=3,0x60188bbd9a93fb75:0x34e0de0018b3269,1' +
 '&cbll=35.659362,139.744854&panoid=-o46OC9WbmlXHKjOyLWB8Q' +
 '&cbp=12,159.95,,0,-38.84';
var val = getQuery (locationSplit (str)[6]);
var cbll = val.cbll.split(',');
var cbp = val.cbp.split(',');

alert ([cbll[0], cbll[1], cbp[1], cbp[4]]);

はりつけるまえですよね、その2
ぜんかくくうはくは、はんかくにしてね。

var getQuery = function (querys) {
 var result = { };
 var i = 0
 var query;
 var nv;

 querys = querys.split ('&');

 while ((query = querys[i++])) {
  nv = query.split ('=');
  result[ decodeURIComponent (nv[0]) ] = decodeURIComponent (nv[1]);
 }

 return result;
};

var locationSplit = function (url) {
 return /^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/.exec(url);
};
...続きを読む

Q【Javascript】(テキストボックスの)テキストの末尾にフォーカスを置きたい【フォーム】

onLoad時にテキストボックスにフォーカスをあてるのですが、
質問タイトルのようなことができません。

前ページからPOSTで持ってきた文字列を入れたテキストボックスなのですが、
BODYタグ部分にonLoad="frm.elm.focus();"と書くと、
そのテキストボックス内の文字列の先頭にフォーカスが行きます。

文字列の続きを入力する項目なので
文字列の末尾にフォーカスを置きたいのですが
方法はありますでしょうか。

ご存知の方いらっしゃいましたらご教示願います。
質問が解りづらかったらすみません。
宜しくお願い致します。

Aベストアンサー

これでどうでしょう?
<html>
<body onLoad=document.F1.I2.focus();document.F1.I2.value="テスト">
<form name="F1">
<input type="text" name="I1"><br><input type="text" name="I2">
</form>
</body>
</html>

Q[Javascript]TEXTAREAで改行させるには?

こんにちは。
name="memo" となっている TEXTAREA があるとします。

document.myForm.memo.value = "aaa";
としましたら aaa が TEXTAREA に表示されます。

今回は・・・
aaa
bbb
というように、間に改行を入れて表示させたいと考えています。

"aaa" と "bbb" の間に改行のコマンド的なものを挟めばいいとは思うのですが・・・

わかりません・・・宜しくお願い致します。

Aベストアンサー

こんにちは

document.myForm.memo.value = "aaa\nbbb";
とすれば良いです。
\nは改行コードです。

ご確認ください。


人気Q&Aランキング

おすすめ情報