SkRegExpでプログラムを作っています。
このヘルプファイルに「文字列をすべてUNICODEで処理しています」とあるのですが、シフトJISのファイルの場合正常に動作するのでしょうか?
実際に試してみて、正常に動作するかを確認してみるのはいかがですか?
igyさん回答ありがとうございます。
以前、旧バージョンで作ったときはうまく動いていたはずなんですが、PCが壊れ、やっとのことでプログラムを抜出し、移植している最中です。
ソフトがうまく動かず、原因がどこにあるのか調べているところです。
原因究明のために質問させてもらったのですが...
頭を冷やしてアルゴリズムから調べなおしてみます。
Delphi XEを使っているのですが、UNICODEにしたテキストファイルの読み込みがうまくいきません(デバッグのため、読み込んだファイルの行数を表示させているのですが、0のままです)。
シフトJISだと正確に(1800行ほど)表示されるのですが。
ファイルのコードの変更はエディタでやっています。
何か、私が苦労していたことと同じことかもと思って書き込みます。
書き込み、読み込みのソースを見せてくださいませんか。
altlegendさん、ありがとうございます。
テキストファイルを読み込む部分のプログラムです。
RefTextFileName := 'RefText.txt';
RefText:=TStringList.Create;
RefText.LoadFromFile(RefTextFileName);
Edit1.Text:= IntToStr(RefText.Count);
とりあえず、行数が正確に表されるか確認するため最後の行を付け加えました。
(行ごとに処理しているため、これがだめだと後もダメになります)
ひとつわかったことは、エディタでコードを変更して保存するときにBOMというのを無にすると行数が1行と表示されることがわかりました。
あと改行コードを変更して試してみようと思っています。
http://ht-deko.minim.ne.jp/tech015.html#tech043
ドゾー。
http://www.watercolor-city.net/ct_delphi/delphi_tiburon/doc_unicode/tencoding_textio.htm
いや、totonica さんのが詳しいな。
フォーマットを指定して読み込むようになっているんですか。
DEKOさん、ありがとうございます。
えーと、確認しますが、下のでは2009でもunicodeじゃないんですか。
SL := TStringList.Create;
try
SL.Add('あいうえお');
// ファイル保存
SL.SaveToFile('C:\Default.txt');
finally
SL.Free;
end;
えーと、すみません、上。他人のを勝手に貼り付けてしまって。
で、これは自分のですが、これらは2009でコンパイルしてるんですけど、何のコードで保存されますか。
AssignFile(F, FileName); Rewrite(F);
for j:=1 to MSS do
begin
InBuff:=FD[j,1]+','+FD[j,2];
for k:=3 to 7 do InBuff:=InBuff+','+floatToStr(FB[j,k-2]);
writeln(F,InBuff);
end;
closeFile(F);
to altllegend さん
どちらとも "やってみればわかる事" だと思いますよ。
前者も後者も、Shift_JIS (ANSI デフォルトエンコーディング) で出力されます。
http://www.embarcadero.com/jp/rad-in-action/migration-upgrade-center
Unicode 系の話は公式サイトに一通り揃っていますので、
まずはそちらをご一読ください (特に右側)。
>これは自分のですが、これらは2009でコンパイルしてるんですけど、何のコードで保存されますか。
実際、出力されたコードを確認すればわかると思いますが、シフトJISだと思います。
DEKOさん、Igyさんありがとうございます。
DEKOさん、すみませんが、読んでも分からないんです。
意味が分からないことばかりで。
主力されたコードを確認する方法が分かりません。
出力されたものはシフトJISとのことですが、それを読み込んだらunicodoになってるんですか。
ファイルに保存して有名どころのテキストエディタで読めば、
ファイルの文字コード自動判別機能で大体わかると思いますが…
http://ht-deko.minim.ne.jp/tech013.html#tech039
http://ht-deko.minim.ne.jp/tech014.html#tech040
http://ht-deko.minim.ne.jp/tech014.html#tech041
http://ht-deko.minim.ne.jp/tech041.html#tech081
http://ht-deko.minim.ne.jp/tech045.html#tech093
http://www.watercolor-city.net/ct_delphi/delphi_tiburon/index.htm
追加でドゾー。
今日は。
あさん、付属のメモ帳とかワードパッドとかでは分からないと思うんですが。
見方が悪いですかね。
DEKOさん、ありがとうございます。
一応見ましたが、やはり読んでも頭には残っていないような・・・。
分かるためには記憶力がいるような気がします。
最後の2009特集は、2009を買ったときにお世話になったところです。
HPのダウンロードのプログラムに参考にさせてもらいました。
当時は検索してもここしか見当たらない感じでしたね。
メーリング何とかは見てもよく分からないし、大変でしたよ。
まあ当時も読んでも意味が分かりませんでしたが。
あの、もう私にはレス結構ですので。
ありがとうございました。
DEKOさん、ごめんなさい。
せっかく教えていただいたんですが、
Loadする具体例が書かれていないので、私にはわかりません。
出来れば、UNICODEのテキストファイルを読み込むプログラムを教えていただけないでしょうか?
Unicode のファイル読み込みは、
"例示した totonica さんのサイトに書かれていた" ように、
> 読み込み時にはLoadFromFileの第2引数にTEncodingを指定するだけです。
これだけです。
SL := TStringList.Create;
try
// ファイル読み込み
SL.LoadFromFile('C:\Default.txt', TEncoding.Unicode);
// (処理)
finally
SL.Free;
end;
...が、あなた (呼びにくいのでコレで) の仰る
"UNICODE" は UTF-8 の事だと思われますので
SL := TStringList.Create;
try
// ファイル読み込み
SL.LoadFromFile('C:\Default.txt', TEncoding.UTF8);
// (処理)
finally
SL.Free;
end;
となるのではないかと思います。
> Loadする具体例が書かれていないので、私にはわかりません。
リンク先の資料はすべて読んでみましたか?
>付属のメモ帳とかワードパッドとかでは分からないと思うんですが。
メモ帳なら以下の要領で確認できます。
・モ帳で読み込んで文字化けしていないことを確認。
・「名前をつけて保存」を選択。
・出てきたダイアログの下のほうに「文字コード」というコンボボックスがあるのでその値を見る。
ANSI となっていればShift-JIS
Unicode になっていればUTF-16のリトルエンディアン
Unicode big endian となっていればUTF-16のビッグエンディアン
UTF-8 となっていればUTF-8
DEKOさん、ありがとうございます。
一応すべての資料に目を通したつもりです。
今晩やってみます。
> 一応すべての資料に目を通したつもりです。
そうですか。
[第16回デベロッパーキャンプ 【1E】資料]
http://conferences.embarcadero.com/article/images/40483/devcamp_encore_20100415_Full.pdf
P.63 に LoadFromFile の例が載っています。
上記の物に限らず、デベロッパーキャンプの資料には膨大な情報があります。
これを機に一度デベロッパーキャンプの資料を精査してみてはいかがでしょうか?
[88.とりあえず、デベロッパーキャンプの資料を読んでみようか。]
http://ht-deko.minim.ne.jp/tech044.html#tech088
Dさん、ありがとうございました。
確かに、JISでした。
保存方法を変えてUNICODEにしたら、プログラムが全然動きません。
全部直すとしたら大変なので、このままで行きます。
altlegendさん,こんにちは.Mr.XRAYです.
前にエディタのことが書かれていました.
メモ帳,ワードパッドでもいいのですが,
専用のテキストエディタを持っていると便利です.
ネットで「テキストエディタ」で検索してみてください.
昔は,秀丸エディタというのが定番の時代がありましたが,現在はいろいろ
あります.Delphi使いの方には,TEADというのも人気があるようです.
当初の質問のSkRegExpのことではありませんが,文字コード(文字コードページ)
に関することでしたら,手前味噌ですが,以下のサンプルが参考になれば幸いです.
実際のコード(もちろん,Loadする具体例もあります)と,EXEを添付していますので,
すぐ動作確認できます.サンプルのテキストファイルも添付しています.
883_文字コードページとテキストファイルの保存と表示
http://mrxray.on.coocan.jp/Delphi/plSamples/883_CodePageTextFile.htm
>これらは2009でコンパイルしてるんですけど
提示したページのサンプルは,Delphi 2010で動作確認しています.
Delphi 2009も2010同様,Unicode対応バージョンですので,たぶん,そのまま利用可能と思われます.
>883_文字コードページとテキストファイルの保存と表示
>http://mrxray.on.coocan.jp/Delphi/plSamples/883_CodePageTextFile.htm
ごめんなさい.ネットで検索するとでてきますね.
もし,すでにご覧になっていたら申し訳ありません.
ツイート | ![]() |