| 

.NET C# Java Javascript Exception

0
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?

Gruß
Spicejam
07.09.2009
spicejam 853 2 6
5 Antworten
1
Die Dateistruktur ähnelt ja sehr einer Tabelle...

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.
07.09.2009
licht_micha 364 1 3
1
Hi spicejam,

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

Der Aufruf schaut dann wie folgt aus:

Vorname = GetEintrag("3000", MyList)
Nachname = GetEintrag("3001", MyList)
Zweitname = GetEintrag("3002", MyList)

Ich hoffe das ist was Du gesucht hast und hilft Dir weiter.

Gruß

Feuerbowle
07.09.2009
Feuerbowle 21 1 1
1
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:

Vorname = daten("3000")
Nachname = daten("3001")
Zweitname = daten("3002")
07.09.2009
chris 61 1 1
0
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.
07.09.2009
pgampe 61 1 2
0
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.

Ich glaube diese Community kommt noch sehr weit:)
07.09.2009
spicejam 853 2 6
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.
balu 07.09.2009

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH