• ベストアンサー

Delphiのreadlnについて

テキストファイルから 1,2,3 4,5,6 7,8,9 のような形式のデータを読み込みたいのですが, readlnの場合,一行読みこんでしまう。 似たようなものにreadがあるようだがこれを使うと 動かない。 何か良い方法、参考書があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんにちは。 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;

hgdream
質問者

お礼

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

その他の回答 (1)

  • prome
  • ベストアンサー率32% (64/196)
回答No.1

>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プログラミング」凛太郎著 がよかったです。

hgdream
質問者

補足

promeさん回答ありがとうございます。 >readlnで一行読み込んでしまうことがまずいんでしょうか? 質問内容が不充分だったようです。たとえば、2次元配列Num[3][3] に数値を代入して,利用したいと考えています。 VBだとinput#関数を利用すると,カンマの前までの値がえられます。 これと同じようにDelphiで行いたいと思います。

関連するQ&A

  • fortranでテキストファイルを読み込む

    fortranでプログラムを作っています。 普通にテキストファイルの文字列を読み込むことくらいは出来ます。 そこで、質問です。 あるテキストファイルがあります。 これは行数が何行あるかわからないとします。 しかし、一行の形式はすべて同じです(例えば、3つの数字とか)。 そこで、ループでこのファイルをすべて読み込み、 行が無くなったらREADを終了する方法を知っている方がいたら教えて下さい。 ちなみにfortranは77もしくは95です。 わかりづらくて済みません。 よろしくお願いいたします。

  • Delphi6 Delimiterの使い方

    CSVファイルの処理で困っています。 ファイルから1行読んだ後、必要なカラムだけを 取得しようと思っています。 TStrings と DelimitedText を使って カンマで分割してくれるのは便利なのですが、 どうも半角スペースでも分割してしまうようです。 Delimiterプロパティで ',' と指定してるはず なのですが、空白も強制的に分割文字になって しまうんでしょうか? ソースのイメージとしては Var SL: Tstrings; で宣言して begin   ・・・   readln(target, line); { 1行読み込み }   SL := TStringList.Create;   SL.Delimiter := ',';   SL.DelimitedText := line; とやった上で SL[0]とかSL[1]とかで必要なカラムを取得しています。 宜しくお願いします。

  • VBAでの構築の質問

    VBAの初心者ですが、データの抽出をしたいと考えています。 フォルダの中に、複数のテキストファイル形式のデータがあり、 その中にあるファイル毎の一部データのみ抽出できないかと考えております。 元データ(1)(テキストファイル形式) 10行目にあるデータ A TOKYO 20行目にあるデータ 100 200 1000 2000 (データの間には、スペースがあります。) 元データ(2)(テキストファイル形式) 10行目にあるデータ B Fukuoka 20行目にあるデータ 300 400 3000 4000 (データの間には、スペースがあります。) 編集後のデータは、それぞれのテキストデータ ・10行目データの2番目の抽出 ・20行目データの2番目の抽出 ・20行目データの4番目の抽出 を抽出できないかと考えています。 編集後データ(エクセルファイル形式に出力)は、下記のような感じできないかと考えてます。     (A列) (B列) (1行目)TOKYO Fukuoka (2行目)200 400 (3行目)2000 4000 皆さんからのご回答、 よろしくお願いいたします。

  • textarea形式のフォームで複数行入力したテキストデータを保存すると、複数行のデータができてしまう現象を回避する方法

    「テキストファイルのデータを読み込み、html画面のフォームに表示させ、データを修正後、元のテキストファイルに書き戻す」というCGIを作成中です。 テキストファイルのデータの並びは決まっていて、例えば3番目のデータが「名前」4番目のデータが「住所」だったりします。 ここで、複数行の入力が必要なフィールドをが必要となり、"textarea"形式のフォームを設定したところ、複数行のインプットをすると、テキストファイルにも複数のデータができてしまいました。2行のデータをインプットすると、データも2行になってしまい、後のデータがずれてしまいます。 そこで「複数行のテキストデータを、改行マークをつけたまま、1行のデータとして保存し、読み込んでtextarea 形式のフォームに表示させるときは、改行されて表示する」という処理が実現できるよう、時間をかけて調べておりますが未だ判らない状態です。  ご存じの方がいらっしゃいましたら是非教えて頂きたく、宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • Fortranで1行飛ばして読み込む方法

    例えば次の内容が書かれているテキストファイル(data.txt)があるとします. ------------data.txt------------ time temperature 1.000E+00 5.632E+02 -------------------------------- このdata.txtに書いてある2行目の値をfortranを用いて読み込もうとすしたいのですが, fortranで open(100,file='data.txt') read(100,*) time, temperature と書くと, data.txtの1行目の'time temperature'の文字を読み込もうとし,当然エラーが出てしまいます. 読み込みたいのはdata.txtの2行目の数値のみなのですが, その方法がわかりません. 読み込む方法を教えていただけないでしょうか.

  • Delphi6で、実行後、一時停止をしたい。

    Delphi6を使ってPascalを勉強しています。 Delphi6でプログラムを記述し実行すると、MS-DOSが出てきて実行します。 しかし、実行した後すぐに終了してしまうので困っています。 合っているのか確認できません。 そのために一時停止用に型宣言のときに、 x:string;  end.の前に  readln(x)  を付けて止めるようにしているのですが、 プログラムによって止まるのと止まらないのがあります。 どうしてなのでしょうか。 ↓は止まりません。どうしたら止まってくれますか? 配列にデータを追加するプログラムです。 program ng; {$AppType Console} uses SysUtils; var  i, j, n, dat : integer;  a : array[1..100] of integer;  {一時停止のため変数名}  x:string; begin {配列にデータを入力する}  n := 6;  a[1] := 20; a[2] := 30; a[3] := 60;  a[4] := 70; a[5] := 80; a[6] := 90;  writeln('(1)現在の配列の内容');  for i := 1 to n do write(a[i]:3);  writeln;  writeln('(2)挿入するデータ?');  read(dat);  repeat    writeln('(3)挿入する位置?');    read(i);  until(i < n) and (i > 0); {配列への挿入}  for j := n downto i do a[j+1] := a[j];  a[i] := dat;  n := n+1; {挿入後の配列を表示}  writeln('(4)挿入後の配列の内容');  for i := 1 to n do write(a[i]:3);  {一時停止のためのread文}  readln(x) end.

  • タブ区切りtxtファイルをCSVファイルにしたい

    数値データの入ったタブ区切りのテキストファイルが約80個あり、 それらを全てCSVファイルにしたいです。 テキストファイルのデータ形式は以下のようになっています。 339.54 1091.50 339.92 1091.50 340.30 1091.50 340.68 1057.60 341.06 1028.22 これがあと数百行あります。 コマンドプロンプトでCSVにリネームすると、数値が詰まってしまい、困っています。 例えば上のデータ例であれば、 339.541091.50 のように表示されたCSVファイルになってしまいます。 339.54, 1091.50 のようなカンマ区切りのCSVファイルとして出力する方法はないでしょうか? VBAの知識が少しだけあるので、それを使った方がいい場合は教えて頂けると幸いです。 よろしくお願い申し上げます。

  • エクセルデータをテキストに移す方法

    エクセルのデータをテキストに移す方法を教えてください。 例えばエクセルの1行目~100行目までデータがあるとして、その100個のデータを100個のテキストファイルにそれぞれ入れてくれるソフトがあれば教えていただきたいです。 1行のデータを1つのテキストファイルに移すという作業です。 コピペすれば済む話ですが数が膨大なので、時間がかかりすぎます。 よろしくお願いします。

  • バッチファイルでテキストファイル読込

    バッチファイルにてテキストファイルを一行読込みたいのですが、 「,」までの位置しか取得できません。 現状の該当箇所のコマンドと読込むテキストは以下になります。 [実行するコマンド] For /F "delims=" %%i in (read.txt) Do Call :Sub %%i :Sub set DATA=%1 echo %DATA% [読込むテキスト read.txt] "111","222","333","444" "111","222","333","444" [結果] "111" 結果の通り、カンマまでしか取得できていない状態です。 どなたかご教授の方、よろしくお願い致します。

  • 250万行1ギガbのテキストデータを分割して、それぞれテキストファイルとして保存したい

    250万行1Gbのテキストデータを分割して、それぞれテキストファイルとして保存して、 アクセスやエクセルで開きたい。 当方、VISTAです。 250万行1Gbのテキストデータを分割して、それぞれテキストファイルとして保存して、アクセスやエクセルで開きたいです。 ソフト「ファイル裁断+」だと、分割できましたが、テキストファイルでない形式なので、結局、再マージするしかないかと・・・ ソフト「div」は、なぜか、実行中の後、データが消えてしまいます。データが重すぎるのか、VISTAだからなのか・・・ ソフト「Em Editor」で、地道に切り取り→貼り付けして分割しようにも、10万行とかの貼り付けはできないようです。 ちゃんと起動してくれるなら、有料でもかまいません・・・ どうぞ、よろしくお願い致します。

専門家に質問してみよう