csvファイルを読み込み、一部の列を削除して保存するには?

解決


Hara  2008-12-16 05:12:25  No: 32897

初歩的な質問で失礼いたします。

csvファイルを読み込み
一部の列を削除
保存
  といったプログラムを検討中です。

  具体的には、
1 5 6 7
6 2 5 9
9 3 6 5
  といったデータの、第一列と第二列を削除して
6 7
5 9
6 5
  のデータをcsvで再保存したく思っております。

列の削除方法について、何かしらのアドバイス頂ければ幸いです。


Hire  2008-12-16 05:36:48  No: 32898

これは、
>1 5 6 7
>6 2 5 9
>9 3 6 5

こういうファイルなの?
1,5,6,7<CRLF>
6,2,5,9<CRLF>
9,3,6,5<CRLF>


それって  2008-12-16 06:12:03  No: 32899

Excelマクロとかでよくないか?
わざわざソフト組んでやるほどのことじゃないと思うんだが。

どういうアドバイスが欲しいの?
普通に考えたらTMemo.Lines.LoadFromFileとDeleteでいけると思うんだけど。


HOta  2008-12-16 06:18:06  No: 32900

TStringsに読み込んで、各行の3番目からを取り出せばいいのでしょう。


Hara  2008-12-16 06:19:25  No: 32901

失礼いたしました。

1,5,6,7<CRLF>
6,2,5,9<CRLF>
9,3,6,5<CRLF>

というファイルです。

今現在は、
Square,Line  といった二つのTStringListを定義して、

Square  で全数読み込み
Line  で
6,7
5,9
6,5
 を抜き取り、保存を試みております。


Hara  2008-12-16 06:22:32  No: 32902

普通に考えたらTMemo.Lines.LoadFromFileとDeleteでいけると思うんだけど。

ありがとうございました。
知識が浅いため、上記ご指摘の手法まで考えが及びませんでした。
試みてみたいとおもいます。


Fusa  2008-12-17 02:48:44  No: 32903

Haraさんの考えているやり方でいいと思いますよ。

こんな感じでしょうか。いろいろ試してみてください。

var
  i: Integer;
begin
    StrList := TStringList.Create; try
    StrList.LoadFromFile(パス);
    CsvStrList := TStringList.Create; try
    for i=0 to StrList.Count -1 do
    begin
      CsvStrList.CommaText := StrList[i]
      if 3 <= CsvStrList.Count then
      begin
        CsvStrList.Delete(1);
        CsvStrList.Delete(0);
      end;
      StrList[i] := CsvStrList.CommaText;
    end;
    finally CsvStrList.Free; end;
    StrList.SaveToFile(パス);
    finally StrList.Free;
end;


Hara  2008-12-17 07:35:50  No: 32904

Fusaさん、Hireさん、それってさん、HOtaさん
ありがとございました。おかげ様で解決いたしました。

最終的には、TStringListを使う方法を採用しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加