• 締切済み

CSVファイルの処理

TextData = New Microsoft.VisualBasic.FileIO.TextFieldParser(FileName, System.Text.Encoding.Default) TextData.TextFieldType = FileIO.FieldType.Delimited TextData.SetDelimiters(",") TextData.TrimWhiteSpace = False While Not TextData.EndOfData Dim row() As String = TextData.ReadFields() For Each field In row       ・       ・       ・   Next End While こんな形でCSVファイルを読み出しているのですが、 カンマで区切られていても値の入っていないデータ(セル)は forループ内を通らず読み飛ばされ、次のデータの処理をしてしまいます。 ※例えば下記のようなCSVだったとすると、 野球 ,, サッカー , バスケ 処理は4回行ってほしいのに、2つ目の何もない箇所はとばされて 処理は3回しか行われません。 カンマで区切られていれば値が入っていなくとも処理を行うにはどうすればよいでしょうか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

当方の環境では 4回For Eachが回りますよ WinXP SP2 + VS2005TS SP1 変数 row()に代入する行で ブレークして ステップ実行した際に rowのLengthプロパティは4ですか、3ですか

関連するQ&A

  • TextFieldParserで"含むファイルを

    c sharp、Visual Studio 2015でコーディングしています。 TextFieldParserでtsvを読み込みたいのですが、ケースにより エラーが出て困っています。 using (TextFieldParser parser = new TextFieldParser(filePath, Encoding.GetEncoding("utf-8"))) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters("\t"); //タブ区切り while (!parser.EndOfData) { // 1行読み込み string[] row = parser.ReadFields(); ←ここでエラーになる } } tsvファイルにダブルクォーテーションが含まれているとエラーになってしまうようです。 回避する方法はないでしょうか? tsvは以下のように記述されています。 "aaa bbb" 1 2 3 4

  • カンマ区切りの文字列をDatasetに登録するには?【VB.NET2005】

    テキストファイルを読込んでカンマ区切りでDatasetに登録する際は 以下の方法で行っていました。 Dim tfp As New TextFieldParser(fileName, System.Text.Encoding.GetEncoding("Shift_JIS")) Dim dt As New DataTable Dim dr As DataRow tfp.TextFieldType = FieldType.Delimited tfp.SetDelimiters(",") While Not tfp.EndOfData dr = dt.NewRow dr.ItemArray = tfp.ReadFields dt.Rows.Add(dr) End While tfp.Close() ds.Tables.Add(dt) これをファイルではなくDim str As String = "123,aaa" という文字列に対して行いたいのですが、 上記のReadFieldsの用に使える物は無いでしょうか?

  • VB2010 DataGridVie CSV読込

    VB2010で出勤簿を作っています。 社員名簿と出勤簿がDataGridviewで作成され、社員名簿のDataは出勤簿に連動しています。 このDataGirdViewのDataを別のPCにある出勤簿でも使えるようにしたいので、素人考えでCSV形式で保存して、FDに移して別のPCに入れて使ことにしました。(CSV形式でなくても、移動できるのでしたら、そうしたいのですが、方法が分からないので、仕方なくCSV形式を選びました) いろいろ勉強しまして、保存方法は習得しましたが、CSVを読み込む際に、 [コントロールがデータバインドされているとき、DataGridView の行コレクションにプログラムで行を追加することはできません。] というエラーが出ました。 対処方法をご存知の方が居られましたら、ご教授ください。 コードを記載します。 Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click Dim parser As TextFieldParser = New TextFieldParser("savekyoto.csv", Encoding.GetEncoding("Shift_JIS")) parser.TextFieldType = FieldType.Delimited parser.SetDelimiters(",") ' 区切り文字はコンマ '出勤簿のDATAを初期化する Dim j As Integer For j = 0 To Me.DataGridView1.Rows.Count - 2 Me.DataSet11.出勤簿.Rows(j).Delete() Next While (Not parser.EndOfData) Dim row As String() = parser.ReadFields() ' 1行読み込み ' 読み込んだデータ(1行をDataGridViewに表示する) DataGridView1.Rows.Add(row) End While End Sub

  • TextFieldParserについて

    VC2008でusing namespace Microsoft::Win32;using namespace Microsoft::VisualBasic::FileIO; を追加し、TextFieldParserの使い方を利用したいでしたが、エラーになりました。 String^ csvfilename; Microsoft::VisualBasic::FileIO::TextFieldParser parser = gcnew Microsoft::VisualBasic::FileIO::TextFieldParser(csvfilename,System::Text::Encoding::GetEncoding("Shift_JIS"));ではエラーがあります。 error C2664: 'Microsoft::VisualBasic::FileIO::TextFieldParser::TextFieldParser(System::String ^)' : 1 番目の引数を 'Microsoft::VisualBasic::FileIO::TextFieldParser ^' から 'System::String ^' に変換できません。

  • vb2008です。ListViewついてです。

    初心者です。説明に分かりにくい所もあるかと思いますがよろしくお願いします。 csvファイルを用いてListViewで一覧の作成をしています。 Using textPatser As New Microsoft.VisualBasic.FileIo.TextPatser("C:¥~¥.csv",System.Text.Encoding.GetEncoding("UTF-8")) textPatser.TextFiledType=FileIo.FiledType.Delimited textPatser.HasfildsEnclosedInQuotes=True textPatser.SetDelimitedrs(",") ListView1.Items.Clear() While Not textPatser.EndOfData Dim fields As String() = textPatser.ReadFields() ListView1.Items.Add(New ListViewItem(fields)) End while End Using のコードにてListViewの一覧に入力しました。 一覧に国名の列があり0001,0002,0003....と入力しています。 別のcsvファイルに数字のコードと国名 国コード,国名 0001,日本 0002,アメリカ 0003,フランス と作りました。これを認識、0001の所は、日本と表示出来るようにしたいのですが 仕方を知りたいです。よろしくお願いします。

  • CSVファイル読み込み 文字化け

    アドバイスの方頂ければと思い質問しました。 os fedoracore5/php 5.2.5/mysql 5.0.27 SJISのCSVファイルを読み,UTF-8のプログラムで処理したいのですが、 文字列中に[,]を使用しているものには[""]で囲って いて、その他文字列の日本語部分は[""]で囲まれていません。 そこで下記のような形にしたのですが、日本語が化けてしまいます。 またCSVファイルの文字化けする項目を[""]で囲むと 正常に表示されます。文字列を[""]で囲まずとも文字化けしない方法、またプログラムに問題があればアドバイスを 頂ければと思います。 <?php define("TEST_FILE", "./tes.csv"); header("Content-Type: text/plain; charset=SJIS"); $fp = fopen(TEST_FILE, "r") ; while ($row = fgetcsv($fp)) { for ($j = 0; $j < count($row); $j++) { $data = mb_convert_encoding($row[$j], "UTF-8", "SJIS"); printf($data); } } fclose($fp); ?>

    • ベストアンサー
    • PHP
  • 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がまだ不慣れな為質問やサンプルが分かりずらいと思いますが よろしくお願いします。

  • TextFieldParserの固定長桁数をバイト単位で指定したい

    TextFieldParserによる固定長テキストファイルの読込で、 桁数を文字数ではなく「byte数」で指定する方法を教えてください。 (FileOpen関数などではなく、あくまでもTextFieldParserを使用するのが前提です) 以下に、文字数指定による読込のコードを記述します。 よろしくお願いします。 'VBのコード-----------------------------------------------   Public Shared Sub Main()     Using reader As New TextFieldParser("C:\test.txt", Encoding.GetEncoding("SHIFT_JIS"))       reader.TextFieldType = FieldType.FixedWidth       reader.SetFieldWidths(2, 7, 2)       Dim currentFields() As String       While Not reader.EndOfData         Try           currentFields = reader.ReadFields() ' 一行読込           Dim currentField As String           For Each currentField In currentFields             Trace.WriteLine(currentField)           Next         Catch ex As MalformedLineException           MessageBox.Show(ex.Message)         End Try       End While     End Using   End Sub 'VBのコード ここまで------------------------------------ <読み込む固定長ファイル> 01やまだいちろう26 02やまだじろう 23 <実行結果> 01 やまだいちろう 26 02 やまだじろう 23 >reader.SetFieldWidths(2, 7, 2) この部分を >reader.SetFieldBytes(2,14,2) '関数名は適当 このように指定できないか、と考えています。

  • csvファイルのヘッダとカンマの関係

    ヘッダ付きのCSVデータがあります。 テキストファイルとしてエディタで開くとカンマ区切りでした。 エクセルで開くと、うまくヘッダに沿ってデータを確認できます。 そのセルの値の中には、"カンマ"が含まれています。 なぜエクセルは、カンマ区切りのデータで値にもカンマが存在しているのにヘッダに沿って表示できるのでしょうか? また、このデータをデータベースに登録する時に、 カンマ数で、エラーしました。エクセルのように、 ヘッダに沿ってデータをコピーする方法を教えてください。

    • ベストアンサー
    • MySQL
  • CSVデータのn番目だけの値を取得したい

    次のCsvファイルがあります。この2番目の列の値(つまり20,35,58・・・)だけを取得(1次元配列に入れる)したいのです。 ,cosmos,himawari 710,20,106 725,35,131 805,58,175 820,97,180 903,110,180 次のようにしましたが、2番目の値だけの抽出が出来ません。どのように直せば良いでしょうか? <?php $TextData = file("./cosmos.csv"); for($i=0; $i<10; $i++){ $cosmos = $TextData[i][cosmos]; } return $cosmos print_r($cosmos); ?> 出力結果 Array ( [0] => ,cosmos,himawari [1] => 710,20,106 [2] => 725,35,131 [3] => 805,58,175 [4] => 820,97,180 [5] => 903,110,180 )

    • ベストアンサー
    • PHP

専門家に質問してみよう