
VB.NETでテキストファイルを読み込み、行頭が指定の文字列だったら処理をしたいです。
下記のような感じ(だいぶ端折ってますが)でやってみましたがうまくいきません。
Dim sr As New System.IO.StreamReader( テキストファイル名 , System.Text.Encoding.GetEncoding("Shift-JIS"))
Dim Buffer As String = sr.ReadToEnd
'行ごとに分割して判定
For Each TextLine as String In Buffer.Split(vbCrLf)
MsgBox(TextLine)
If TextLine Like "○○○*" Then
'実行したい処理
End IF
NEXT
メッセージボックスの表示では正常に1行ずつ取り出せていますがIfの判定ができません。
このままでは文字列として判定の条件には使えないのでしょうか?
No.2ベストアンサー
- 回答日時:
Likeに引っかからないのは、
「For Each TextLine as String In Buffer.Split(vbCrLf)」
で取得した文字列にvbCrLfが含まれているからです。
デバッグモードでTextLineの文字列を調べるとわかると思います。(メッセージボックスやウォッチウィンドウでは改行が省略して表示されてしまうのかvbCrLfが先頭にあるように見えませんが、コード上の変数の上にカーソルを持っていくと改行が先頭に入っているのがわかります)
解決方法は、
方法1 ファイルを一行ずつ読み込む(sr.ReadLine)
方法2 Splitした後にvbCrLfを削除する。
方法3 Splitして一行ずつ取り出すのではなく、StringReaderクラスを利用する。
最初にファイル内容を一括で読み込んでおられるので、方法3の例を下記に記しておきます。
Dim Buffer As StringReader
Dim TextLine As String
Buffer = New StringReader(sr.ReadToEnd)
'行ごとに分割して判定
Do
TextLine = Buffer.ReadLine()
If TextLine = Nothing Then Exit Do
Debug.WriteLine(TextLine)
If TextLine Like "(info)*" Then
'実行したい処理
Debug.WriteLine("Like に引っかかった")
End If
Loop
ご指摘の点を確認したところ、先頭にLfがついていました。
Split()の区切り文字がvbCrLfだと2文字になってしまうのが悪いのかと思い、読み込み後にBuffer.Replace(vbCrLf,vbLf)としてから区切り文字vbLfで同じ処理を実行したところ正常に動作しました。
まだ統合開発環境の使い方もよく分からない状態でしたので助かりました。
ありがとうございました。
No.1
- 回答日時:
Like 演算子は使った事が無いので分かりませんが、
行頭が指定の文字列だったらと言う条件でしたら
StringクラスのStartsWithメソッドを使用されては
いかがでしょうか?
Public Function StartsWith( _
ByVal value As String _
) As Boolean
パラメータ
value
シークする String 。
戻り値
value がこの文字列の先頭と一致するかまたは Empty である場合は true 。それ以外の場合は false 。
--------
行ごとに分割して判定
For Each TextLine as String In Buffer.Split(vbCrLf)
MsgBox(TextLine)
If TextLine.StartsWith("○○○") Then
'実行したい処理
End IF
NEXT
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列の最大値を抽...
-
MS SQLServer のSQLで文字列の...
-
VBA2005 16進を2桁で表示したい。
-
エクセルで文字列をtxtファイル...
-
Left関数とRight関数を合わせた...
-
文字列の最後の文字を置き換え...
-
VBAで、セルの一部の文字色を変...
-
VBAを使って選択した範囲の数字...
-
変数内に入った文字列の結合 UWSC
-
SQL の Update文(?) と ...
-
VC++6.0 エディットボックス小...
-
ダブルコーテーションでアンド...
-
StringGridで選択した箇所の文...
-
vbsからバッチファイル実行時の...
-
ORCLEでの小数の表示方法の変更...
-
Msgboxの×が押されたとき
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列をtxtファイル...
-
【Excel VBA】複数ある特定の文...
-
エクセル 数値データを桁をそ...
-
Excelで3E8を3.00E+8にしない方...
-
VBA2005 16進を2桁で表示したい。
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
Excelで指数表現しないようにす...
-
MS SQLServer のSQLで文字列の...
-
VBの「As String * 128」とは?
-
エクセルでセル内の文字列の最...
-
ORCLEでの小数の表示方法の変更...
-
bashスクリプトでの文字列から...
-
LEFT関数で文字数を指定しない...
-
アクセスで特定の数字以外(複...
おすすめ情報