• ベストアンサー

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

  • カンマ区切りでないテキストをcsvへ

    カンマ区切りしていないテキストファイルを一気にカンマ区切りしてcsvに変更することはできないのでしょうか?? 元のテキストファイルをワードパッドで開いてカンマ区切りし直して保存し、名前の変更でcsvに変更(拡張子が変更するとファイルが使用できなくなる可能性あり、というエラーは無視)したら読み込めるようにはなります。 しかしカンマ区切りし直すというのは面倒です。

  • CSVファイルの読み込み

    使用ソフト:Microsoft Visual Basic 2005 Express Edition csvファイル(カンマ区切り)で一列目(aaaの部分)を表すにはどうしたらよいのでしょうか? aaa,bbb,ccc

  • ExcelファイルをCSV 形式で保存するには?

    ExcelファイルをCSV 形式 (Windows、カンマ区切り) (*.csv)にして書類を提出するように言われたのですが、その方法について教えてください。 データの内容は会社の詳細で、1社につき100項目のデータがあり、それが50社あります。その場合、1社目のデータをA列に、2社目のデータをB列にというように入力すればよいのでしょうか? Excel の [名前を付けて保存] ([ファイル] メニュー) を使って、CSV (カンマ区切り) (*.csv)ファイルで保存すると、各項目がカンマで区切られるのでしょうか? 1レコード目と2レコード目はどういった区切りになるのでしょうか? またファイル形式はCSV 形式でと言うことですが、提出するファイル名の拡張子を.txtとしないといけないのですが、それはどうすればいいのでしょうか?

  • カンマ区切りCSVファイルをVBAで読み込みたい

    こんにちは。EXCELのVBAに詳しい方、どうか教えてください! カンマ区切りCSVファイルをEXCELに読み込みたいのですが、 CSVファイルのデータが金額のため、データ自体にもカンマが含まれていて、 金額のカンマでも分割されてEXCELのセルに収まってしまいます。 データの区切りのカンマと、金額のカンマを区別して読み込む良い方法はないでしょうか。 とても困っているので、お解りになる方どうかご回答をお願いいたします。 ・CSVファイルのデータ   1,000 , 2,000 , 1,500 , 3,000 , 1,000 , 2,500 , 2,000  ↑金額のカンマでデータが分割されないように読み込みたいのですが・・・

  • カンマ区切り形式ではなく、セミコロン区切り形式のCSVファイルを作りた

    カンマ区切り形式ではなく、セミコロン区切り形式のCSVファイルを作りたいのですが、どのようにしたらよいのでしょう。困っています。

  • マクロでのcsv読み込みについて

    エクセルのマクロにてcsvファイル(カンマ区切り)のデータを読み込むマクロを制作しているのですが、そのcsvファイルが1行めを2行目がデータ本体ではない為カンマの数が違い、openを使って読み込みを行うとうまくいきません。何かいい方法はないでしょうが。よろしくお願いいたします。

  • EXCELで保存しているファイルをCSV(カンマ区切り)にしたい

    EXCELで作成されたファイル(1)(拡張子:xls)をCSV(カンマ区切り)のファイル(2)(拡張子:csv)にしたいのですが、方法として、(1)をEXCELで開き、CSV(カンマ区切り)で保存し、(2)を作成する方法しかないのでしょうか? 例えば、DOSのコピーコマンドなどで変更する方法や、エクスプローラー上で拡張子を変更する方法などなど。 できれば、画面を開いたり、閉じたりしたくない(自動で変換させたい) 宜しくお願い致します。

  • CSVカンマ区切りって知ってますか?

    WEB上で会員登録をしてもらった場合、会員データをHPで入力しますよね。そのデータを直接エクセルのデータ管理に飛ばしたいのですが・・その場合、データ形式をCSVカンマ区切りにしてFDで保存をしたいのです。 知りたい部分は、HPからダイレクトにエクセルにデータを飛ばす方法です。ご存知の方っ教えて下さい!困ってます・・・・

  • ExcelでのCSVファイルの編集について、

    ExcelでのCSVファイルの編集について、 オートフィルタ機能を使いたいため、 ExcelでCSVファイルの編集しようとしているのですが、ちょっと苦戦しています。。。 私が試してみたこと 1.もとのCSVファイルの拡張子を○○.csv → ○○.txtに変更。   ↓ 2.Excelの「開く」からその○○.txtを読み込む。   ↓ 3.テキストファイルウィザードに従い、   1「カンマやタブなどの区切り文字によって~ 」にチェック   2「区切り文字」→ カンマ、「文字列の引用符」 → "   3「列のデータ形式」 → 文字列 ※090などの数字を、90と先頭の0を消されないように 上記のような手順でCSVファイルを取り込み、編集を終え、 保存する時は   「○○.txtにはテキスト(タブ区切り)と互換性のない機能が含まれている可能性があります。    この形式でブックを保存しますか?」 → このまま保存するため「はい」を選択 これでバッチリOK!…かと思われたのですが、 元の編集前の○○.txt は"名前","ヨミ","電話番号1", …… ""とカンマ区切りであったのが、 編集後の○○.txtは名前 ヨミ 電話番号1  …… タブ区切り(?) となってしまっています。 (CSVファイルとしてはタブ区切りでも問題ないのでしょうが…) どうすれば元のカンマ区切りの形式のまま保存できますでしょうか。 アドバイスよろしくお願い致します。

  • csvファイルを上書き保存でカンマ区切りされない

    csvファイルのセルに文字を入力して、「上書き保存」をすると ”XXXXX には、CSV(カンマ区切り)と互換性のない機能が含まれている可能性があります。この形式でブックを保存しますか? ” というメッセージが出たので「はい」をクリックして上書き保存しました。 再度そのファイルを開いてみると、カンマ区切りされておらず、各セル内の文字が結合されていました。 そこで質問なのですが、 試しに上記の上書き保存をせず、右上の「ウィンドウを閉じるボタン(×ボタン)」をクリックして、 「保存しますか?」との問いに「はい」と答え、 次に”XXXXX には、CSV(カンマ区切り)と互換性のない機能が含まれている可能性があります。この形式でブックを保存しますか? ” との問いに「はい」と答えた形で保存をすると、きちんとカンマ区切りされていました。 なぜ上記の方法では正常にカンマ区切りされなかったのでしょうか? どうぞよろしくお願いいたします。