アプリ版:「スタンプのみでお礼する」機能のリリースについて

テキストファイルから

1,2,3
4,5,6
7,8,9

のような形式のデータを読み込みたいのですが,
readlnの場合,一行読みこんでしまう。
似たようなものにreadがあるようだがこれを使うと
動かない。


何か良い方法、参考書があれば教えてください。

A 回答 (2件)

>readlnの場合,一行読みこんでしまう。



readlnで一行読み込んでしまうことがまずいんでしょうか?

それより、巨大なテキストファイルでない限り、
ファイル全体を一遍に読み込んでしまう手もあります。

uses節にFileCtrlを追加し、TStringList型の変数を定義します。
たとえばsl:TStringList;。
実行部で
sl := TStringList.Create;
sl.LoadFromFile(テキストファイル名); // これで一遍に読む
// 処理
sl.Free;
とします。
処理の部分で読み込んだ文字列の処理ルーチンを書きますが、
読み込んだ行数はsl.Count、読み込んだ各行はsl.Strings[i]
(iは0からsl.Count-1までの整数。何行目かを表す)
で拾えます。
一遍に読むのでreadlnよりは速いはずです。

またFileCtrlを使うとコンパイル時に警告
「ユニット 'FileCtrl' はプラットフォームに依存すると宣言されています」
というのが出ますが、これはKylixと互換性がないですよ、と警告するもので
気にする必要はありません。

参考書はレベルにもよるので、何ともいいにくいですが、
私には、日経ソフトウェア編「カンタン!Delphiプログラミング」凛太郎著
がよかったです。

この回答への補足

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

>readlnで一行読み込んでしまうことがまずいんでしょうか?

質問内容が不充分だったようです。たとえば、2次元配列Num[3][3]
に数値を代入して,利用したいと考えています。

VBだとinput#関数を利用すると,カンマの前までの値がえられます。
これと同じようにDelphiで行いたいと思います。

補足日時:2002/08/24 12:59
    • good
    • 0

こんにちは。



TStringsのCommaTextプロパティを使うと手っ取り早いですが。
FormにStringGrid1とButton1を置いてます。

procedure TForm1.Button1Click(Sender: TObject);
var s : TStringList;
  i : integer;
begin
  s := TStringList.Create;
  try
   s.LoadFromFile('Test.txt');
   for i := 0 to s.Count -1 do
    StringGrid1.Rows[i].CommaText := s[i];
  finally
   s.Free;
  end;
end;
    • good
    • 0
この回答へのお礼

ありがとうございます。うまくできました。

お礼日時:2002/08/24 18:54

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