Получение чисел из строк - PullRequest
0 голосов
/ 02 мая 2020

Я очень новичок в программировании на Visual Basi c. Я открываю текстовый файл, используя vb. net. В настоящее время у меня есть программа, которая читает текстовый файл построчно и добавляет каждую строку в массив.

 Private Function Read_GCode() As ArrayList
    Dim objReader As New System.IO.StreamReader(FILE_NAME)
    Dim TextLine As New ArrayList
    Do While objReader.Peek() <> -1
        TextLine.Add(objReader.ReadLine())
    Loop
    Return TextLine
End Function

Мой текстовый файл будет выглядеть примерно так:

(* SHAPE №: 0 *)

G0 X2999,948 Y1771,567

M3 M8

G0 Z 0,000

G1 Z 0,000

F400

G1 X2999,948 Y 771,567

F0

G1 Z 0,000

G0 Z 0,000

M9 M5

G0 X 0,000 Y 0,000

M2 (конец программы)

Следующим шагом является написание функции для получения чисел из каждой строки. Потребуются только строки, начинающиеся с «G». Как извлечь числа из строки?

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Для чтения текстового файла вы можете использовать File.ReadAllLines, который будет возвращать массив строк. Для разбора строк я использовал различные String методы и добавил свойства к GData объектам. Наконец, результат отображается в виде DataGridView.

Private GDataList As New List(Of GData)
Private Sub OPCode()
    Dim lines = File.ReadAllLines("G Code.txt")
    For Each line In lines
        If line.StartsWith("G") Then
            GDataList.Add(ParseG(line))
        End If
    Next
    DataGridView1.DataSource = GDataList
End Sub

Private Function ParseG(input As String) As GData
    Dim g As New GData
    Dim words = input.Split(" "c)
    Dim NextWordIndex As Integer
    g.GValue = CInt(words(0).Trim("G"c))
    If words(1).StartsWith("X") Then
        If words(1).Length > 1 Then
            g.XValue = CDbl(words(1).Trim("X"c))
            NextWordIndex = 2
        Else
            g.XValue = CDbl(words(2))
            NextWordIndex = 3
        End If
        If words(NextWordIndex).StartsWith("Y") Then
            If words(NextWordIndex).Length > 1 Then
                g.YValue = CDbl(words(NextWordIndex).Trim("Y"c))
            Else
                g.YValue = CDbl(words(NextWordIndex + 1))
            End If
        End If
    ElseIf words(1).StartsWith("Z") Then
        If words(1).Length > 1 Then
            g.ZValue = CDbl(words(1).Trim("Z"c))
        Else
            g.ZValue = CDbl(words(2))
        End If
    End If
    Return g
End Function

Public Class GData
    Public Property GValue As Integer
    Public Property XValue As Double
    Public Property YValue As Double
    Public Property ZValue As Double
End Class
0 голосов
/ 02 мая 2020

Попробуйте этот быстрый взлом

Dim decList As New List(Of Decimal)
Dim tmp1 As Integer
Dim str As String = "G0 X2999.948 Y1771.567"
Dim started As Boolean = False
Dim result As String = ""
For i As Integer = 0 To str.Length() - 1
    If (started) Then
        If (Integer.TryParse(CStr(str(i)), tmp1) Or CStr(str(i)) = ".") Then
            result &= str(i)
        Else
            started = False
            decList.Add(Decimal.Parse(result))
            result = ""
        End If
    Else
        started = True
        If(Integer.TryParse(CStr(str(i)), tmp1) Then
            result &= str(i)
        End If
    End If
Next

Приведенный выше код должен вернуть 2999.948 и 1771.567 в decList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...