C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: vb2010 csv読み込み


(過去ログ 115 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■67940 / inTopicNo.1)  vb2010 csv読み込み
  
□投稿者/ たくや (1回)-(2013/09/11(Wed) 13:08:41)

分類:[VB.NET/VB2005 以降] 

こんにちは。初めて質問します。
Microsoft Visual Basic 2010 Expressを使って勉強中のものです。

CSVを読み込むプログラムを参考書を使って作成しました。
以下のコードです。

読み込むCSVファイルの1行目2行目に項目があります。
この項目を飛ばして3行目から読み込むようにしたいのです。

ルール処理の部分に i=i+1 カウントさせて、読み込み処理の部分を
If i >=3 then で囲みましたが、読み込みは1行目から読み取ってしまいます。

どのようにすれば3行目から読み込むようにできるのかわかりません。
ご教授お願い致します。
  


Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Dim line As String
        Dim field() As String
        Dim reader As System.IO.StreamReader
        Dim terms As String = "1"
        Dim fname As String = "D:\test.csv"


        Try
            'ファイルを開く
            reader = My.Computer.FileSystem.OpenTextFileReader(fname, System.Text.Encoding.Default)

            lstExpense.Items.Clear()

            Do Until reader.EndOfStream

                '1行読み込む
                line = reader.ReadLine


                'カンマの位置で分割する
                field = line.Split(",")


                '2番目のデータが条件に合致した場合、リストボックスに表示する
                If field(2) = terms Then
                    lstExpense.Items.Add(field(5) & " " & field(3))
                End If


            Loop

        Catch ex As Exception

            'エラーメッセージを表示する
            MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Finally
            'ファイルが開いている場合はクローズする

            If reader IsNot Nothing Then
                reader.Close()
            End If

        End Try
End Sub

引用返信 編集キー/
■67943 / inTopicNo.2)  Re[1]: vb2010 csv読み込み
□投稿者/ Hongliang (98回)-(2013/09/11(Wed) 13:41:03)
> ルール処理の部分に i=i+1 カウントさせて、読み込み処理の部分を
> If i >=3 then で囲みましたが、読み込みは1行目から読み取ってしまいます。

その修正した後のコードを書いてほしいところです。

Do Until reader.EndOfStream
    If i >= 3 Then
        '1行読み込む
        line = reader.ReadLine

みたいな感じでしょうか?
これだと、iが2までの間、ReadLineを呼び出さない=行を読み進めません。
つまり、その間readerの現在位置はずっとファイルの先頭のままです。

ReadLineした後で、指定行になったかどうかを判定させる必要があります。

引用返信 編集キー/
■67945 / inTopicNo.3)  Re[1]: vb2010 csv読み込み
□投稿者/ shu (390回)-(2013/09/11(Wed) 13:47:22)
No67940 (たくや さん) に返信
> ルール処理の部分に i=i+1 カウントさせて、読み込み処理の部分を
> If i >=3 then で囲みましたが、読み込みは1行目から読み取ってしまいます。
Do Untilの中を囲ったのでしょうか?

読込は
> line = reader.ReadLine
で行うので
囲むならこの処理を行った後ですね。

> '2番目のデータが条件に合致した場合、リストボックスに表示する
> If field(2) = terms Then
> lstExpense.Items.Add(field(5) & " " & field(3))
> End If
この条件があるから1,2行目は項目行とか考えなくてよい気がします。

引用返信 編集キー/
■67946 / inTopicNo.4)  Re[2]: vb2010 csv読み込み
□投稿者/ たくや (2回)-(2013/09/11(Wed) 14:11:29)
ご回答ありがとうございます。

ReadLineした後に処理を追加したら無事項目を飛ばすことができました。
ありがとうございました。


Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Dim line As String
Dim field() As String
Dim reader As System.IO.StreamReader
Dim terms As String = "1"
Dim fname As String = "D:\test.csv"
Dim i As Integer = 1
Dim midasi As Integer = 3


Try
'ファイルを開く
reader = My.Computer.FileSystem.OpenTextFileReader(fname, System.Text.Encoding.Default)

lstExpense.Items.Clear()

Do Until reader.EndOfStream

'1行読み込む
line = reader.ReadLine
If i >= midasi Then

'カンマの位置で分割する
field = line.Split(",")


'2番目のデータが条件に合致した場合、リストボックスに表示する
If field(2) = terms Then
lstExpense.Items.Add(field(5) & " " & field(3))
End If
End If

i = i + 1
Loop

Catch ex As Exception

'エラーメッセージを表示する
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)

Finally
'ファイルが開いている場合はクローズする

If reader IsNot Nothing Then
reader.Close()
End If

End Try
End Sub
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -