Hallo, ich hab eine Frage zur Verarbeitung von Strings. Ich habe eine Datei die ich zeilenweise in eine "ArrayList" einlese. Aus dieser "ArrayList" nehme ich mir die Zeile die ich brauche und entferne überflüssiges Anhand von "RegEx". Das heißt ich weiss wie lang die Zeilen sind und was genau ich aus dieser Zeile brauche. Jetzt hab ich das Problem, dass diese Zeilen von Datei zu Datei unterschiedlich ausfallen. z. B. ist der Wert den ich brauche einmal in Zeile 1. und bei der nächsten Datei in Zeile 2. Dateiformat:(Zeilenlänge + 2)(Feld)(Wert)
Die erste Datei z. B. so: (012)(3000)(Max) (019)(3001)(Mustermann)
Die zweite Datei z. B. so: (012)(3002)(flo) (019)(3001)(Mustermann) (012)(3000)(Max)
*Datei ist natürlich ohne Klammern, nur zur Veranschaulichung.
Wie kann ich nun die jeweilige Zeile "identifizieren"? Ist es überhaupt möglich das ganze so flexibel zu realisieren?
Vll. solltest du auf ein DataSet zurückgreifen. Näheres findest du hier: OpenBook (ist zwar in csharp, aber die Basics lassen sich recht einfach übertragen)
Alternativ kannst du deine Arraylisten mit 2 geschachtelten Schleifen durchlaufen und Wert für Wert vergleichen ob du die Zeile brauchst oder nicht.
mit folgender Funktion kannst Du relativ einfach das gewünschte Feld aus der ArrayList auslesen:
Private Function GetEintrag(ByVal Feld As String, ByVal Liste As ArrayList) As String For Each Item In Liste If InStr(Item, Feld) > 0 Then Return Item End If Next Return "" End Function
Unter der Voraussetzung, dass jedes Feld nur einmal in einer Datei vorkommt, würde ich die Datei nicht in eine ArrayList sondern in ein Dictionary(Of String, String) einlesen. Dann kannst Du den Feldtyp als Key nehmen und den Wert als Value.
Dann kannst Du später ganz einfach an die Daten kommen:
wenn du keine Unterscheidungsmerkmal hast, kannst du es per Computer nicht lösen...
allerdings würde ich in deinem Fall schauen, ob nicht jedes Feld mit gerader Nummer einen Nachnamen enthält oder einen Vornamen. Dies kommt jedoch auf deinen Dateien an.
Also die Feldbezeichnung ist fest. Das heißt ich weis, dass die Feld-Nr: 3001 der Nachname ist. Aber nicht in jeder Datei sind z. B. 2 Vornamen enthalten(Siehe Datei 2) das variiert eben. Das mit den 2 geschachtelten Schleifen ist ne gute Idee, manchmal denkt man halt einfach zu kompliziert :).
Falls jemand das gleiche Problem hat: Die Zeilenlänge + Wert anhand von "RegEx" entfernen, identifizieren und Zeile nochmals auslesen/ verarbeiten. Wird zwar viel Code bei mehreren Felder aber was solls.
Bitte nicht eine eigene Antwort posten! Durch Voting kann die Reihenfolge durcheinanderkommen. Das ist kein Forum. Wenn es was zu ergänzen gibt, dann mach das bitte, indem Du Deine Frage bearbeitest oder bei der entsprechenden Antwort einen Kommentar hinterlässt.