• 締切済み

TAB区切りのCSVデータ読込

fumufumu_2006の回答

回答No.1

vb2005に限らず.netは浅い知識(触っているが仕事と言うわけではない)なんですが・・・ お手軽にやるなら、全部読み込んで、crlfとtabで分解してあげる。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sr As New System.IO.StreamReader("C:\test.txt") Dim line() As String = Split(sr.ReadToEnd(), vbCrLf) 'line()に改行区切りで読み込み For row As Integer = 0 To UBound(line) Dim field() As String = Split(line(row), vbTab) 'field()にタブ区切りで読み込み '以下field(col)で各種処理 For col As Integer = 0 To UBound(field) Debug.Print(row & "-" & col & "=" & field(col)) Next Next sr.Close() sr = Nothing End Sub End Class というのはどうでしょう? Dim sr As New System.IO.StreamReader("C:\test.txt", System.Text.Encoding.GetEncoding("Shift_JIS")) とかすると、いろんなコードが読めます。 でもせっかくvb2005ならTextFieldParserなんかはどうでしょう? それと、vb2005から使えるUsingも2005以前のvbユーザはもちろん、vb6系からの人は助かるかも・・・ Imports Microsoft.VisualBasic.FileIO 'TextFieldParser使う時は必要 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Using parser As New TextFieldParser("c:\test.txt") parser.TextFieldType = FieldType.Delimited 'フィールド区切りあり parser.SetDelimiters(vbTab) 'フィールド区切りはタブ Dim row As Integer = 0 Do While Not parser.EndOfData Dim field As String() = parser.ReadFields() ' 1行読み込み '以下field(col)で各種処理 For col As Integer = 0 To UBound(field) Debug.Print(row & "-" & col & "=" & field(col)) Next row = row + 1 Loop End Using End Sub End Class というのはどうでしょう? これを使うメリットは、"aaa"とか"abc[tab]def"とか、""を"に変換するとかをしてくれます。 (場合によっては余計なお世話と言う事もありますが・・・) ちなみに、 Dim parser As New TextFieldParser("text.csv", System.Text.Encoding.GetEncoding("Shift_JIS")) とかすると、いろんなコードが読めます。 using~end usingは、今まで new (dim new や set ??=new)で宣言した場合、最後にdispose(close)してあげないといけなかったのが、不要になるそうです。 特にエラー処理なんかがある場合に便利そうです。 vb6やvbaからの人は、忘れがちなdispose(close)の心配がなくなりそうです。 最初の Dim sr As New System.IO.StreamReader("C:\test.txt") も using sr As New System.IO.StreamReader("C:\test.txt") にして、 sr.Close() sr = Nothing を end using にできます。 以前からですが、.net系になってからの変数の宣言と初期化が一緒にできるのもありがたかった・・・ p.s. 浅い知識なので、間違っていたら、誰か指摘してください。 独り言 csvは Comma Separated Valuesのことだから、tab区切りの場合は「tab区切りのテキストファイル」の方が・・・

taka_1
質問者

お礼

アドバイスありがとうございました。 早速、やってみます。

関連するQ&A

  • 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個ほどあるので)に対して、 プログラムを実行できればなおいいと思います。 よろしくお願いします。

  • CSVデータの取り込み

    開発環境 言語 VB6.0 DB  ACCESS 一つ目は、CSVデータをACCESSに保存したいのですがどうしたらいいですか? 開発環境 言語 VB6.0 DB  ORACLE9i 二つ目は、CSVデータをORACLE9iに保存したいのですがどうしたいいですか? どうかよろしくお願いします。

  • csvカンマ区切りデータに=""を入力したい

    csvカンマ区切りデータに、例えば、 ="00",="123",="456" といった感じで入力したいのです。 大元のcsvカンマ区切りデータで、 00,123,456 が入っているので、これをExcelを使ってText変換や書式設定で文字列にして みたのですが、csvデータとしては=""としては保存されていないのです。 どなたか、こういった型変換に詳しいかたご連絡をお待ちしています。

  • CSV→タブ区切り

    CSVファイルでデータを取り込もうとしてますが、金額にカンマが入ってたりして、列がずれたりします。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=361247 ↑等を参照した上ですが、タブ区切りデータでインポートしてみようかと思います。 CSVファイルをタブ区切りファイルに変換するにはどうしたらよいでしょうか?そういうコードはありますでしょうか?

  • VB6.0 CSVファイル読み込みについて

    VB6.0について質問です。 CSVファイルの読み込みを行いたいのですがうまくいきません。。。 以下のソースのどこに問題ありますでしょうか?>< 14個のカンマ区切りのCSVファイルを読み込んでいますが ファイルのデータを変更するとインデックスが有効範囲にありませんというエーラーがでます。。。 ファイルは3行で構成しているのですがヘルプを参照したら複数行の場合はLINE Input #1, MyString(i)と書いてありました。 しかしやってみると行ごとのデータを取得してカンマ区切りで取得してくれませんでした。。。 以下のソースで実行すると改行部でエラーになるようです。 改行を無視するようなロジックを入れる必要があるのでしょうか? Dim MyString(), i Open App.path & "\" & CSV_filename For Input As #1 ReDim MyString(13) Do While Not eof(1) Input #1, MyString(i) Label4(i).caption = MyString(i) i = i + 1 Loop Close #1

  • c#で(",")区切りのcsvファイルから読み込みを行うには?

    駆け出しの初心者です。 以前c言語を少々勉強していてcsvファイルの読み込み、書き出しを練習していたのですが、最近c#を使うようになり、その便利さに圧倒されております。 今回c#で読み込みたいcsvファイルは以下のようになっております "abc","123","あいうえお" ただのカンマ区切りであれば読み込みは簡単ですが、 上記のようにダブルクオーテーションでそれぞれの文字列が囲まれている場合に文字列だけを読み込み、配列に代入していくのに何かスムーズな方法はありませんでしょうか? ちなみに現在単純にカンマ区切りのcsvファイルを読み込むコードを 書いた所ですので、載せておきます これをいじってスムーズにいければうれしいのですが、いかがでしょうか? private void LoadData() { string path = "Data.csv"; string delimStr = ",";//区切り文字 char[] delimiter = delimStr.ToCharArray(); string[] strData;//分解後の文字用変数 string strLine;//1行分のデータ Boolean fileExists = System.IO.File.Exists(path); if (fileExists) { System.IO.StreamReader sr = new System.IO.StreamReader( path, System.Text.Encoding.Default); while (sr.Peek() >= 0) { strLine = sr.ReadLine(); strData = strLine.Split(delimiter); DataSet.DataTable.AddDataTableRow( DateTime.Parse(strData[0]), strData[1],    strData[2], int.Parse(strData[3]), strData[4]); } sr.Close(); } } いつも丁寧な回答で協力してくれる皆様には心から感謝しております。 どうぞよろしくお願いします。

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

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

  • CSVでタブ区切り

    はじめまして。エクセル2003を使用中です。 データのやり取りをする際に 「エクセルのデータをCSVでタブ区切り」に変換して送って欲しい と言われました。 保存時に 「名前を付けて保存」→「ファイルの種類」で「CSV」を選択すると「カンマ(,)」で区切られますよね? これを簡単にタブ区切りにしたいのですが・・そんな方法はありますでしょうか? 現在、試作の段階では一旦TXT形式で保存し、ファイル名を直接「CSV」に変更しています。 実は常時この作業を行う者が私よりPCに詳しくない為、この手順だと不安だと言います。 出来る限りわかりやすく作業を行いたいのです。 不明点があれば補足させていただきますので アドバイス等ございましたらどうぞよろしくお願いします。

  • CSVでタブ区切り

    はじめまして。エクセル2003を使用中です。 データのやり取りをする際に 「エクセルのデータをCSVでタブ区切り」に変換して送って欲しい と言われました。 保存時に 「名前を付けて保存」→「ファイルの種類」で「SCV」を選択すると「,」で区切られますよね? これを簡単にタブ区切りにしたいのですが・・そんな方法はありますでしょうか? 現在は一旦TXT形式で保存し、ファイル名を直接「CSV」に変更しています。 実は常時この作業を行う者がPCに詳しくない為、できる限りわかりやすく作業を行いたいのです。 不明点があれば補足させていただきますので アドバイス等ございましたらどうぞよろしくお願いします。

  • CSVファイルの読み込み

    お世話になります。 VBAでCSVファイルを読み込んで処理をしたいのですが、 たとえば下記のようなCSVファイルの場合 2つめの項目が金額セットされており、あらかじめ通貨編集(カンマ編集) がされていて 金額を1つの項目として読み込む事が出来ません。 金額は""でくくってあるのですが、 カンマ区切りのデータと""でくくってあるデータを うまく区別して3つの項目をそれぞれ抽出する事は可能でしょうか? -----以下CSVの内容------ 日付,金額,データ 2007/03/09,"1,200",TEST1 2007/03/09,"12,200",TEST2 2007/03/09,"76,00",TEST3 2007/03/09,"4,5600",TEST4 --------------------------- ちなみに現在はこのようにカンマ区切り指定でデータを抽出してるので うまく出来ません。   'FileNameにはオープンするファイル名がセットされています   Open FileName For Input As   'textlineに1行を読み込む   Line Input #ch1, textline   csvline() = Split(textline, ",") VBAがまだ不慣れな為質問やサンプルが分かりずらいと思いますが よろしくお願いします。