CSVファイルの空白について

解決


ロビタ  2004-11-12 11:27:41  No: 117553

初心者です。よろしくお願いします。
VB6.0上でFlexgridコントロール上にCSVファイルを読み込んで表示させたいのですが、エクセル上で作ったCSVファイルには空白行があり、それを読み込もうとするとEOFの場所がその空白行の前までになってしまっているようなのです。
空白行もちゃんと読み込んでほしい場合はCSVファイルは適していないのでしょうか?CSVファイルをノートパッドなどで見てみるとちゃんと改行してそのあとのデータも入っているようなのですが…


特攻隊長まるるう  2004-11-12 18:11:11  No: 117554

>CSVファイルをノートパッドなどで見てみると
>ちゃんと改行してそのあとのデータも入って
>いるようなのですが…
じゃあ、エクセル使わずテキストファイルの
データとして取り込めばいいんじゃないの?


よし  2004-11-12 18:21:18  No: 117555

具体的にCSVのファイルの内容とか
読み込むソースを見ないとなんともいえないですねぇ


LESIA  2004-11-12 18:30:36  No: 117556

1行の項目数が10個だと仮定するとこんな感じでどうでしょう

Dim iFileNo As Integer
Dim strFileName As String
Dim strBuffer As String
Dim strData() As String
Dim lngCount As Long

Const ColCount  As Integer = 10

lngCount = -1

strFileName = "C:\hogehoge.csv"
iFileNo = FreeFile
Open strFileName For Input As #iFileNo
Do Until EOF(iFileNo)
    Line Input #iFileNo, strBuffer
    lngCount = lngCount + 1
    ReDim Preserve strData(lngCount)
    If strBuffer = "" Then
        '空白行の場合、空データ作成
        strData(lngCount) = String$(ColCount - 1, vbTab)
    Else
        strData(lngCount) = Replace(strBuffer, ",", vbTab)
    End If
Loop

MSFlexGrid1.Cols = ColCount
MSFlexGrid1.Rows = UBound(strData) + 2
MSFlexGrid1.Col = 0
MSFlexGrid1.Row = 1
MSFlexGrid1.ColSel = MSFlexGrid1.Cols - 1
MSFlexGrid1.RowSel = MSFlexGrid1.Rows - 1
MSFlexGrid1.Clip = Join(strData, vbCr)


ロビタ  2004-11-13 08:16:21  No: 117557

皆様遅くなってしまい申し訳ありませんでした。
LESIAさんありがとうございますっ。
理解に時間がかかってしかいましたが

Line Input #iFileNo, strBuffer
で一行づつ取り込んでいくという発想はありませんでした。
さらに空白行はvbtabを代入して空のデータとして一行つくるのですね。
そして最後に
MSFlexGrid1.Clip = Join(strData, vbCr)
で配列を結合&改行する、と。すばらしいです。

やはりプログラミングも発想が大事なのですね。

同じように今度はグリッドデータをCSVファイルに保存しようと思い

Private Sub Command3_Click()

Dim strData As String
Dim intFileNo As Integer    'ファイルNo

With MSFlexGrid1

        .Visible = False        '一旦非表示に(読込が早くなる)
        .Col = 24
        .Row = 20
        .ColSel = 1
        .RowSel = 1

        strData = MSFlexGrid1.Clip  'MSFlexGridの選択されているデータをstrDataに格納
        strData = Replace(strData, vbTab, ",")  '格納されたデータから空白(タブ)を","に置き換える
    
    
    
        'データの上書保存処理
    
    
        intFileNo = FreeFile
        Open "C:\analized deta\seiseki2.csv" For Output As #intFileNo
    
        Write #intFileNo, strData

        Close #intFileNo
        'カレントセルを反転表示に戻す
        .Visible = True
        .Row = 1  'ホームポジションに移動
        .Col = 1
        .TopRow = 1
        .SetFocus
End With

End Sub

このようにグリッドをすべて選択し、strdataに格納してタブを今度は逆の手順で","に置き換えCSVに上書きするというものです。
保存はできているのですが、なぜか読み込みと保存を繰り返すたびに先頭と終わりに""が加わって増えてしまうのです。たとえば先頭の数字が0だったとすると"0になり"""0になり…という具合です。データの終わりもまた然りです。なにがいけないのでしょうか?


LESIA  2004-11-13 23:10:22  No: 117558

Writeステートメントとはそういうものです。
代わりにPrintステートメントを使ってください。

Print #intFileNo, strData


ロビタ  2004-11-14 01:18:25  No: 117559

LESIAさんありがとうございます。

Printステートメントでうまくいきました。
FlexGrid関連はなかなか参考になる書籍などがないので本当にこちらのサイトに助けてもらっています。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加