プロが教える店舗&オフィスのセキュリティ対策術

読み込んだ数十行のテキストファイルがAnsiStringで定義されているんですが、

AnsiString A;
~~~
A = AA + AB +".txt";

Label1->Caption=A[10];
~~~

でAの10行目を確認しようと上記のようにやってみたのですがテキストファイルと同じ値になりませんでした。ちゃんと読み込みはできていたのですが行を指定すると値がおかしいです。どうすれば行が同じになるか教えてくさい。

A 回答 (3件)

なるほど、本当に「行」でしたか。

早とちりして申し訳ありません。

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;

---ここまで---

といった感じです。

この回答への補足

返事が遅くなりすみません。

TStringListについて勉強して理解しましたが、プログラムに入れてみると”リストのインデックスが範囲を超えています(9)”と表示されます。

Aのファイルは約500行のものなのですが関係あるのでしょうか。。

補足日時:2008/09/19 13:39
    • good
    • 0

もしかして、変数「A」に格納されているのは、テクストファイルの実データではなく、ファイル名ですか?


だとしたら、そのファイルから中身を読み取る処理が必要です。

> astringlist->Text = A;
の代わりに
> astringlist->LoadFromFile(A);
としてみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/19 16:07

「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です。

この回答への補足

返答ありがとうございます。

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

補足日時:2008/09/17 17:38
    • good
    • 0

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