初心者です。よろしくお願いします。
VB6.0上でFlexgridコントロール上にCSVファイルを読み込んで表示させたいのですが、エクセル上で作ったCSVファイルには空白行があり、それを読み込もうとするとEOFの場所がその空白行の前までになってしまっているようなのです。
空白行もちゃんと読み込んでほしい場合はCSVファイルは適していないのでしょうか?CSVファイルをノートパッドなどで見てみるとちゃんと改行してそのあとのデータも入っているようなのですが…
>CSVファイルをノートパッドなどで見てみると
>ちゃんと改行してそのあとのデータも入って
>いるようなのですが…
じゃあ、エクセル使わずテキストファイルの
データとして取り込めばいいんじゃないの?
具体的にCSVのファイルの内容とか
読み込むソースを見ないとなんともいえないですねぇ
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)
皆様遅くなってしまい申し訳ありませんでした。
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になり…という具合です。データの終わりもまた然りです。なにがいけないのでしょうか?
Writeステートメントとはそういうものです。
代わりにPrintステートメントを使ってください。
Print #intFileNo, strData
LESIAさんありがとうございます。
Printステートメントでうまくいきました。
FlexGrid関連はなかなか参考になる書籍などがないので本当にこちらのサイトに助けてもらっています。
ありがとうございました。
ツイート | ![]() |