• ベストアンサー

csv(カンマ区切り)の読み込みと書き出し

Visual Basic Express Edition 2008での質問です。 下記のようなカンマ区切りのCSVファイル(拡張子はtxt)があります。 (150万行以上あるので、エクセルでの編集が出来ません) 1,18845.50,-14572.50,16.30,1 2,18846.50,-14572.50,16.29,1 3,18832.50,-14573.50,16.25,1 で、実はこのCSV形式のファイルの一番左のレコードと 一番右のレコードは必要ないので削除し、 18845.50,-14572.50,16.30 18846.50,-14572.50,16.29 18832.50,-14573.50,16.25 上記のようなデータにして、再び同じ形式で保存したいのです。 どなたか、いい方法orソースの提供をお願いしたいです。 可能ならば、複数のデータ (そのテキストファイルが200個ほどあるので)に対して、 プログラムを実行できればなおいいと思います。 よろしくお願いします。

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

  • ベストアンサー
回答No.5

VB2008 が使えるのなら、古くからの方法で良いでしょう。 下記のサンプルは、CSVファイルに記述されている要素のうち 2~4番目の要素のみを新しいファイルに書き出すプログラムです。 Dim oldFile As String Dim newFile As String Dim buf As String Dim sepBuf Dim oldFno As Integer Dim newFno As Integer oldFno = FreeFile newFno = FreeFile Open oldFile For Input As oldFno Open newFile For Output As newFno Do While Not EOF(oldFno) Line Input #oldFno, buf sepBuf = Split(buf, ",") Print #newFno, sepBuf(1) & "," & sepBuf(2) & "," & sepBuf(3) Loop Close #oldFno Close #newFno フォルダ内のファイルを連続で処理したい場合は DIR命令を調べてください。

nazonokaij
質問者

お礼

ありがとうございました! なんとか解決しそうです。

その他の回答 (4)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

一例ですが、ADODBを使用してCVSをデータベースのように扱う方法があります。 Dim Con As ADODB.Connection Con = new ADODB.Connection Con.Open("Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\xx~yy\;" _ & "Extended Properties=""Text;FMT=Delimited;HDR=no;""") Dim RST As ADODB.Recordset RST = Con.Execute("SELECT * FROM hoge.txt") Data source=以下のディレクトリは実際の環境に合わせます。 CVSファイルの第1行目が見出し行の場合はHDR=Yesにします。 SQLのFROM句は実際のファイル名にします。 RSTのEOFプロパティがFalseであれば処理可能です。 RSTを次のレコードに位置付けるにはMoveNext()メソッドを使います。 RST内のフィールドを参照するには以下のようにします。 RST.Fields(インデックス).Value インデックスは0~RST.Fields.Count-1までです。

nazonokaij
質問者

お礼

上のHayashi_Trekさんの方法を参考にして なんとか出来そうです。 ご協力感謝します。 ありがとうございました。

  • kikujack
  • ベストアンサー率47% (17/36)
回答No.3

SQL Server 2005 Express Editionで 処理できます。 でも、そんな大量のデータ、処理の経験がないので、ぜったいにできるといえませ。

nazonokaij
質問者

お礼

分かりました。 ありがとうございました。 試してみます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

perlで片付けるとか。 perl -i.bak -ne '@f = split /,/; print join(",", @f[1..$#f-1]),"\n"' *.txt

nazonokaij
質問者

補足

お返事ありがとうございます。 申し訳ないのですが、上の式ってどうやって使用するんでしょう? perlインストールして、上の式をテキストに書いて、 拡張子plで保存して実行。。 みたいな感じでしょうか・・・?

  • kikujack
  • ベストアンサー率47% (17/36)
回答No.1

150万行以上、大変ですよね。 ある方法があります、参考になると思います。 SQLServerにインポートすれば、処理できます。

nazonokaij
質問者

補足

SQL Server 2005 Express Editionで 可能ですか?

関連するQ&A

専門家に質問してみよう