• ベストアンサー

AnsiStringについて

読み込んだ数十行のテキストファイルがAnsiStringで定義されているんですが、 AnsiString A; ~~~ A = AA + AB +".txt"; Label1->Caption=A[10]; ~~~ でAの10行目を確認しようと上記のようにやってみたのですがテキストファイルと同じ値になりませんでした。ちゃんと読み込みはできていたのですが行を指定すると値がおかしいです。どうすれば行が同じになるか教えてくさい。

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

なるほど、本当に「行」でしたか。早とちりして申し訳ありません。 AnsiString には「行」という概念はありませんので、そのままでは「○行目」といったデータを抜き出すことはできません。 行単位のデータを取り扱う時は、TStringList を使うのが簡単です。 ---ここから--- A = AA + AB +".txt"; TStringList *astringlist = new TStringList; astringlist->Text = A; AnsiString A10 = astringlist->Strings[9]; delete astringlist; astringlist = NULL; Label1->Caption=A10; ---ここまで--- といった感じです。

rarapico
質問者

補足

返事が遅くなりすみません。 TStringListについて勉強して理解しましたが、プログラムに入れてみると”リストのインデックスが範囲を超えています(9)”と表示されます。 Aのファイルは約500行のものなのですが関係あるのでしょうか。。

その他の回答 (2)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

もしかして、変数「A」に格納されているのは、テクストファイルの実データではなく、ファイル名ですか? だとしたら、そのファイルから中身を読み取る処理が必要です。 > astringlist->Text = A; の代わりに > astringlist->LoadFromFile(A); としてみてください。

rarapico
質問者

お礼

早急な返答ありがとうございます。 うまくいきました。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

「10行目」じゃなくて「10文字目」ですよね。 --- 12345abcdef 67890ghiijk ABCDEFGHIJK --- というテキストがあったら、1行目と言ったら「12345abcde」を指します。 2行目が「67890efghi」で3行目が「ABCDEFGHIJ」 「12345abcde」って文字列のうち「e」を指すのは「10文字目」 で、改めて質問の回答になりますが、まずC言語一般の話として、 ・C言語では文字列を「文字の配列」として取り扱います。 ・C言語では、配列の添え字は0から始まります。 そのため、文字列(文字配列)変数「A」があった場合、「A[10]」は、 11文字目を指すことになります。 例えば、文字列Aが「12345abcdef」だった場合、 A[0] = '1' A[1] = '2' A[2] = '3' (略) A[8] = 'd' A[9] = 'e' A[10] = 'f' となるのです。 AnsiString のA[10]といった表現は、C言語の「配列による文字列」と同等のアクセス機能を提供するものですので、 AnsiString でも、添え字の10は11文字目を指すことになるのです。 ですので、10文字目が取り出したいのでしたら、A[9] にすればOKです。

rarapico
質問者

補足

返答ありがとうございます。 すみません本当は10行目をもってきたかったのですが、勘違いしていていました。 行数を指定する場合はどうすればいいいのですか?

関連するQ&A