例えば、kamoku.csvの内容が以下のもので
No,科目no,科目名
1,101,食費
2,201,ガス
3,202,電気
4,901,現金
(5,6,7,〜と続きます。)
2行目以下を配列A[](:Integer)、配列B[]に埋め込みたい。
A[1] := 101、B[1] := 食費
A[2] := 201、B[2] := ガス
A[3] := 202、B[3] := 電気
A[4] := 901、B[4] := 現金
未確認ですが だいたい このようにすればいいかと思います。
Publicで宣言
A: TStrings;
B: TStrings;
procedure TForm1.btnOpenClick(Sender: TObject);
var
f: TextFile;
s: string;
i, n: Integer;
Strings: TStrings;
begin
// TStrings は抽象クラスなので
// TStringList を生成する
Strings := TStringList.Create;
A := TStringList.Create;
B := TStringList.Create;
try
// ファイルオープン
AssignFile(f, ”kamoku.csv”);
Reset(f);
try
n := 1;
while Eof(f) = False do
begin
// 1行読み込んで CommaText に代入
Readln(f, s);
Strings.CommaText := s;
// Strings[i] にそれぞれの列が展開される
A.Add(Strings[1]);
B.Add(Strings[2]);
end;
finally
// Strings 破棄
Strings.Free;
end;
finally
// ファイルクローズ
CloseFile(f);
end;
end;
URLはサンプルソース。
本当は
function ChooseString(const Text, Separator: string; Index: integer): string;
var
S : string;
i, p : integer;
begin
S := Text;
for i := 0 to Index - 1 do begin
if (AnsiPos(Separator, S) = 0) then S := ’’
else S := Copy(S, AnsiPos(Separator, S) + Length(Separator), Length(S));
end;
p := AnsiPos(Separator, S);
if (p > 0) then Result := Copy(S, 1, p - 1) else Result := S;
end;
この様なコードを使って展開するところですが、ブラケットの処理など色々と面倒くさいのでTStrings.CommaTextの機能を使います。
サンプルはDelphi5で作成されているため、Delphi6ではそのままコンパイルできるかどうかわかりません。
その時はフォームにTMemoとTButtonを一つずつ配置し、TButton.OnClickイベントにサンプルソースのコードをコピーしてあげてください。
サンプルソースまで作っていただきありがとうございます。そのままで動作の確認はできました。
今夜にでもソースを確認させていただき、どのような仕組みになってるのかを勉強させてもらいます。
#URLはダミーです。
文字列処理の勉強をしたいわけではないのであれば、エクセルOLEもしくはFomula1コンポーネントをフォームに貼り付けて、そのコンポーネントからCSVファイルを開くというのはどうでしょうか?
#ちょっとコードは書きにくいのでヘルプかなにかを参照してほしいのですが。
ありがとうございます。
これだけだとどうしていいのか全然わからないです。基本を判ってないので、ヘルプで目的の機能の探し方もわからず、どの言葉でウェブ検索すればよいのかもわからずなもので、、、。
−−−−−−−−−−−−−−−
1.と2.の回答の両方とも動作の確認は出来ました。ソースはこれから読んでみます。ありがとうございました。
前回はフラッシュ暗算のソフトを作ってみました。今回は簡単なおこづかい帳ソフトを作ろうと思ってます。科目のマスタと明細のデータはCSVで管理しようかと思ってます。
ありがとうございます。
今は時間がありませんので、今夜にでも確認させてもらいます。