掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数のファイルをcsv形式で結合 (ID:1663)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
とりありずサンプル作ってみました。 procedure FilesToFile(FileNames: array of String; OutPutFile: String); const SizeOfRow = 19; //1行の長さ(改行コード含む) var Ms1, Ms2: TMemoryStream; Buf: Array[1..SizeOfRow] of Char; Fs: TFileStream; i, j, RowCount: integer; begin Ms1 := TMemoryStream.Create; Ms2 := TMemoryStream.Create; Fs := TFileStream.Create(OutPutFile, fmCreate or fmShareExclusive); try for i := 0 to High(FileNames) do begin Ms1.LoadFromFile(FileNames[i]); Ms1.Position := 0; RowCount := Ms1.Size div SizeOfRow; Ms2.Size := Ms1.Size - RowCount; for j := 0 to RowCount - 1 do begin Ms1.ReadBuffer(Buf[1], SizeOfRow); Buf[SizeOfRow-1] := ','; Ms2.WriteBuffer(Buf[1], SizeOfRow-1); end; Ms2.Position := 0; Fs.CopyFrom(Ms2, Ms2.Size); Ms2.Position := 0; end; finally Ms1.Free; Ms2.Free; Fs.Free; end; end; 使い方は、 procedure TForm1.Button1Click(Sender: TObject); begin FilesToFile(['F1.txt','F2.txt','F3.txt'], 'OutPut.txt'); end; これで、'F1.txt'〜'F3.txt' を、一つの CSV にまとめて OutPut.txtに出力します。 配列でファイル名を渡すこともOKです。 エラーチェック等はしてないので、ファイルサイズが、 SizeOfRow の倍数になってない場合はエラーになります。 例えば、最後の行に改行がなかったりするとエラーになります。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.