お世話になっています、DELPHI の入門者です。
Delphi7 のデモのファイル
C:\Program Files\Borland\Delphi7\Demos\RichEdit
を元に作っていて、ファイルを読み込み表示することは出来たのですが、
指定の場所の文字列を変数に代入するのがわかりません。
ファイルはテキストファイルで、各行は「,」で9ブロック有り、各行の
終端は「&H0A」です。
1行から100行まで左端に番号が付いています。
========読み込むファイルの中身=======
1,1,1,124,1,0.000000,0.000000,0.000000,10978144
2,1,2,124,1,0.000000,0.000000,0.000000,10978271
〜〜〜〜〜〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜〜〜〜〜
99,26,1,124,2,0.000000,0.000000,0.000000,10981534
100,26,2,124,2,0.000000,0.000000,0.000000,10981616
==========================
例えば、上記のファイルの49行目の右端のブロックの文字を読むには
どうすれば良いのでしょうか?
やさしく解説をして頂ければ嬉しいです。
よろしくお願いいたします。
RichEditにはLinesというTStringsクラスのプロパティを持っています。
TStringsクラスは文字列リストの基本クラス(抽象クラス)です。
このクラスの変数に添え字を付けると、その添え字+1の行目の文字列が
取得できます。(0で1行目なので)
次にブロック単位で区切るためにTStringListクラスを使用します。
このクラスには CommaText というプロパティがあり、
このプロパティに カンマ(,)を含む文字列を代入するとカンマで自動的に
区切られ、個別に代入されます。TStringListはTStringsクラスを実装した
クラスなので、同じように添え字でブロック数を指定することにより
そのブロックの文字列を取得することが出来ます。
ex)
procedure TForm1.FormCreate(Sender: TObject);
var
TSL : TStringList;
begin
TSL := TStringList.Create;
try
RichEdit1.Lines.LoadFromFile('file.txt');
//49行目をCommaTextプロパティにセット
TSL.CommaText := RichEdit1.Lines[48];
//9ブロック目を取得
Caption := TSL[8];
finally
TSL.Free;
end;
end;
※エラー処理は省略
書き忘れと修正です。
RichEdit以外にもEditでも出来ますし、もう一つTStringListを使って代用することも出来ますよ。
9ブロックというか右端のブロックですね。
TStringListのCountでブロック数を取得して、その値-1で取得してやれば良さそうです。
//9ブロック目を取得
Caption := TSL[ TSL.Count - 1];
あぁ、さらにもう一つミスが。
Editではなく、TMemoの間違いです。
お世話になっています、DELPHI の入門者です。
早速試してみました。
下記がリストです、問題があればご指摘ください。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜省略
type
Tact_49: Tedit;
Tact_97: Tedit;
Tact_All: TRichEdit;
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜省略
var
TSL : TStringList;
begin
TSL := TStringList.Create;
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜省略
TSL.CommaText := Tact_All.Lines[48];
Tact_49.Text := TSL[8];
TSL.CommaText := Tact_All.Lines[96];
Tact_97.Text := TSL[8];
TSL.Free;
end;
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜省略
以上のようにしたら、うまく動きました。
「Javaもう嫌」様、大変ありがとうございました。
*「TMainForm」や「TRichEdit」や「TObject」の「T」は
何の省略文字なのでしょうか?
色々とやり方があるようなので、他でも試してみます。
私が載せたサンプル自体に問題があるのですが、
今のままでは空白行などが入ると値が変わってしまいます。
必ずしも1番のデータが1行目とは限らないのですので。
行数を指定するより、番号を取得して判断させた方がいいかもしれません。
# *「TMainForm」や「TRichEdit」や「TObject」の「T」は
# 何の省略文字なのでしょうか?
確実ではないのですが、Typeの略ではないのでしょうか。
他にDelphiの慣習として、エラークラスのクラス名の先頭にはE、
インターフェースには先頭にIを付ける、と言ったものがあります。
お世話になっています、DELPHI の入門者です。
*空白行などが入ると・・・・
わかりました、左端の文字で判別するように直します。
*クラス名の先頭文字・・・
わかりました。(・・・クラスなどの概念がまだ理解していませんが)
色々と有り難うございました、また勉強してきます。
ツイート | ![]() |