
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
文字列からタブコードを取り除...
-
Msgboxの×が押されたとき
-
アクセスで特定の数字以外(複...
-
VBの「As String * 128」とは?
-
textboxユーザーコントロールの...
-
Left関数とRight関数を合わせた...
-
同一セル内に関数と文字列を同...
-
MS SQLServer のSQLで文字列の...
-
VBA2005 16進を2桁で表示したい。
-
エクセルでSQLでいうところの「...
-
エクセルでセル内の文字列の最...
-
SQL の Update文(?) と ...
-
Excelで指数表現しないようにす...
-
VBA テキストボックスの計算
-
テキストエディタで複数行にわ...
マンスリーランキングこのカテゴリの人気マンスリー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関数で文字数を指定しない...
-
アクセスで特定の数字以外(複...
おすすめ情報