掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
line inputで読み込む際の改行コードについて (ID:120964)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> VB初心者です。 > よろしくお願いします。 こんばんは。 いきなり私に当たるなんてあなたも(ry (つ´∀`)つ とりあえず、自分の環境は明記しましょう。 今はVBが過渡期あるので、暗黙の了解が危険なのです。 > CSVを読み込んで、その中に『"』があれば、 > ○行目の○番目に『"』がある!!というプログラムを作成してるのですが、 > 普通に > > Csvdata = FreeFile > Open "C:\text.csv" For Input As #Csvdata > Do Until EOF(Csvdata) > Input #Csvdata, Data > Loop > > とすると、『"』でも区切られて意図したデータを読み込めません。 ですねw; > そこで、 > > Line Input #Csvdata, Data > > 一行ごとに読込→文字列を加工・チェック > > とすると、例えばエクセルの改行Chr(10)と本来の改行 crlf との区別がつかず > 困っています。 「エクセルの改行」というのが専門的で分かりませんが、 本当にLFしか書かれていないのなら、シーケンシャルアクセスをして、 文字列の読み取りをすると、その場所でEOFと解釈されてしまう感じがします(あやふや…) > その他の説明を見ると、Line input は改行コードまで読込と > あるのですが、どうも改行コードまで読んでないような感じがします。 感じがしますです。 …やっぱり、あやふやはいけませんね(orz > どうすれば、エクセルの改行と本来の改行の区別がつけられるでしょうか? > > ご教授おねがいします シーケンシャルアクセスではどうにもできない場合は、 「バイナリアクセスでゴリゴリ読み取る」という手段が残っています。 …今回は…そうですねぇ、こういうのはどうでしょう? Public Function GetDoubleQuotPoint(ByVal FilePath As String, ByVal LineDelimiter As String) As Collection 'ファイル中の"が含まれる行のコレクションを返す関数 Dim v As Variant Dim cnt As Long Dim buf() As Byte 'コレクションを初期化 Set GetDoubleQuotPoint = New Collection 'ファイルを開いて、ファイル全てを読み込む If FileLen(FilePath) = 0 Then Exit Function Open FilePath For Binary As #1 ReDim buf(1 To LOF(1)) Get #1, , buf Close #1 'カウントする cnt = 0 For Each v In Split(StrConv(buf, vbUnicode), LineDelimiter) cnt = cnt + 1 If InStr(1, v, """") Then GetDoubleQuotPoint.Add cnt End If Next End Function コレクションで取得する関数です。 ノシ<でゎ
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.