ファイル内の文字列の種類と出現数

タグの編集
投稿者 VB初心者  (社会人) 投稿日時 2017/11/5 19:33:41
 今、テキストファイルを1行ずつ読み込んで、処理させています。

 ファイル内に下記のようなデータが入っています。
 ファイル内のmaに続く数字毎の出現数をカウントする場合、どんなやり方が効率的なのか
教えて下さい。
 ma300 : 2回、ma1000:1回のように結果を得たいです。
よろしくお願いします。


<テキストファイル内のデータ例>
x0y0 ma300
qazx ma300
asdfd ma1000(0.042)


投稿者 shu  (社会人) 投稿日時 2017/11/6 00:08:53
TextBox1にファイルの内容が設定されていて
TextBox2に結果を表示するようなサンプルです。あくまで記述が効率的なだけで
スピード的には満足できるものになるかは保証できません。
実際にはファイルからの読み込みはFile.ReadAllTextを使って
1つの文字列変数にファイルの内容をすべて読み込んでしまうと
よいのではないでしょうか。

Imports System.Text
Imports System.Text.RegularExpressions

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim reg As New Regex("ma(?<gp>\d+)")
        Dim res As New StringBuilder

        For Each itm In (From a In reg.Matches(TextBox1.Text).OfType(Of Match)
                         Select gp = a.Groups("gp").Value
                         Group By gp Into cnt = Count)
            res.Append($"ma{itm.gp}:{itm.cnt}回 ")
        Next
        TextBox2.Text = res.ToString
    End Sub
End Class

投稿者 VB初心者  (社会人) 投稿日時 2017/11/6 21:41:48
回答ありがとうざいました。
正規表現をうまく使うのですね。私はリストボックスに追加していく感じで作成していました。
40,000行程度のテキストファイルで試しても、スピード的に全然問題ありませんでした。