I glaube, ein Wörterbuch ist richtig für diesen Job, aber bin mir nicht sicher. Die Anwendung: Analysieren von CNC-Maschinencode (Text), Identifizieren von Sequenzen in dem Code und Speichern eines für jede Sequenz spezifischen Wörterbuchs. Anzahl der Sequenzen variiert. Zeilennummern werden gespeichert, wenn wichtiger Code gefunden wird. Wenn dies abgeschlossen ist, kann der Text noch einmal wiederholt werden, wobei die gespeicherten Zeilennummern als Flags verwendet werden, um nach Bedarf Änderungen vorzunehmen.Gibt es eine Möglichkeit, ein Wörterbuch dynamisch in vb.net zu deklarieren?
Ich habe dieses Problem in der Vergangenheit gelöst, aber die Lösung beinhaltete Looping wie verrückt und die gleichen Daten wiederholt zu lesen. Es sollte viel sauberer sein.
Hier ist, wo ich mit der Logik für diesen neuen Versuch bekommen habe. Ich möchte ein Wörterbuch dynamisch deklarieren, weiß aber nicht, ob es möglich ist.
Dim in_list As New List(Of String)
Dim sequences As New Dictionary(Of Integer, Dictionary(Of String, Decimal))
Try
Dim S100 As New Dictionary(Of String, Decimal)
Dim S200 As New Dictionary(Of String, Decimal)
'
'Dim S5000 as New Dict... come on, now.
'
Dim reader As New StreamReader(filename)
Dim sequence_number As Integer = 0
Dim line_number As Integer = -1
Do While reader.Peek <> -1
Dim L As String = reader.ReadLine
line_number += 1
in_list.Add(L)
'Will be parsing differently, but string.indexof() for example:
If L.IndexOf("M6") > -1 Then 'M6 marks the beginning of a sequence.
sequence_number += 100
If sequence_number = 100 Then
sequences.Add(sequence_number, S100)
sequences(sequence_number).Add("M6", line_number)
End If
If sequence_number = 200 Then
sequences.Add(sequence_number, S200)
sequences(sequence_number).Add("M6", line_number)
End If
'
' If sequence_number = 5000...
' really dude?
'
End If
'Below is not the problem, but may help for suggestions in case
' a dictionary should not be used, or any suggestion.
If sequence_number > 0 And sequences.ContainsKey(sequence_number) Then
If L.IndexOf("F") > -1 Then
If Not sequences(sequence_number).ContainsKey("first_F") Then
sequences(sequence_number).Add("first_F", line_number)
End If
If Not sequences(sequence_number).ContainsKey("last_F") Then
sequences(sequence_number).Add("last_F", line_number)
Else
sequences(sequence_number).Item("last_F") = line_number
End If
End If
End If
Loop
reader.Close()
Catch ex As Exception
End Try
Ein Bit des Codes ich Parsen bin ist:
N100(5/16" CENTER CUTTING MILL)
M6T4
G0G80G90G54X.44Y0.S1550M3
G43H4Z1./M8
G98G81Z-.005R.4F3.
X.37Y0.
X.3Y0.
G80M9
G91G28Z0.M19
G90
M01
ich nicht wirklich eine einfache String.IndexOf werden(), wie in diesem Code gezeigt. Ich werde Funktionen verwenden, um bestimmte Codes zu finden (zB "F" oder "G"), stellen Sie sicher, dass sie nicht in einem (Kommentar), manchmal extrahieren Sie den numerischen Wert des Codes, etc.
Dies scheint wie ein idealer Job für eine regelmäßige Ausdruck. Können Sie Beispiele für die Daten und Muster, die Sie suchen, in Hex angeben? Ich denke, ich verstehe nicht ganz, was das Ganze bewirkt, aber ich bin mir ziemlich sicher, dass ich Ihnen einen besseren Weg zeigen kann, damit umzugehen. –
Beispiele für die Daten wären nett. Dieser Code verwendet nicht die S-Wörterbücher, noch wissen wir, was die Daten darstellen. Ein Wörterbuch ist großartig, wenn es nur einen Eintrag für den Schlüssel geben kann. Das Finden von Sachen muss nicht mehr mit einer kleinen Linq "loopen wie verrückt" beinhalten. – Plutonix
Ich entschuldige mich für meine Ignoranz. Ich weiß nicht, was Sie mit "in hex der Daten" meinen. Ich werde ein Beispiel veröffentlichen. – codingcoding