- ベストアンサー
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個ほどあるので)に対して、 プログラムを実行できればなおいいと思います。 よろしくお願いします。
- みんなの回答 (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命令を調べてください。
その他の回答 (4)
- nda23
- ベストアンサー率54% (777/1415)
一例ですが、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までです。
お礼
上のHayashi_Trekさんの方法を参考にして なんとか出来そうです。 ご協力感謝します。 ありがとうございました。
- kikujack
- ベストアンサー率47% (17/36)
SQL Server 2005 Express Editionで 処理できます。 でも、そんな大量のデータ、処理の経験がないので、ぜったいにできるといえませ。
お礼
分かりました。 ありがとうございました。 試してみます。
- sakusaker7
- ベストアンサー率62% (800/1280)
perlで片付けるとか。 perl -i.bak -ne '@f = split /,/; print join(",", @f[1..$#f-1]),"\n"' *.txt
補足
お返事ありがとうございます。 申し訳ないのですが、上の式ってどうやって使用するんでしょう? perlインストールして、上の式をテキストに書いて、 拡張子plで保存して実行。。 みたいな感じでしょうか・・・?
- kikujack
- ベストアンサー率47% (17/36)
150万行以上、大変ですよね。 ある方法があります、参考になると思います。 SQLServerにインポートすれば、処理できます。
補足
SQL Server 2005 Express Editionで 可能ですか?
お礼
ありがとうございました! なんとか解決しそうです。