Strings zusammenfügen
Guten Abend,
ich habe ein Problem beim zusammenführen von zwei Arrays. Ich habe bisher leider auch noch keine Idee wie ich an diese sache heran gehen soll.
Ich habe folgenden Zustand:
Ich habe zwei Dateien, die ich aufgeteilt in mehrere Variablen (Arrays) einlese.
Zum Beispiel:
Datei Eins:
123456
234567
345678
Lese ich in drei Variablen Ein:
Dim Kennung(10) As String (Hier werden die ersten zwei Zeichen eingelesen)
Dim Wert1(10) As String (Hier die nächsten Zwei)
Dim Wert2(10) As String (Hier die nächsten Zwei)
Das gleiche mache ich mit einer zweiten Datei in drei weitere Variablen (Arrays).
Dim Kennung2(10) As String
Dim Wert1_2(10) As String
Dim Wert2_2(10) As String
Ich möchte diese Variablen nun zusammenführen bzw. gegenüberstellen.
Das ganze soll in eine Art Tabelle geschrieben werden
Kennung Wert 1 Wert 2 Wert1_2 Wert1_2
Die Ausgegabe mit nur einem Array ist relativ einfach und würde so aussehen:
Kennung Wert 1 Wert 2 Wert1_2 Wert1_2
12 34 56
23 45 67
34 56 78
Wenn im zweiten Array das Feld Kennung jedoch identisch ist mit einem Wert aus dem ersten Array, sollen die entsprechenden Werte in die schon vorhandene Zeile eingetragen werden. Wenn nicht, soll eine weitere Zeile eingefügt werden.
Wie kann ich das ganze Aufbauen? Ist eine Zuweisung bei der Ausgabe sinnvoll? Oder muss ich vorher die Arrays zusammenführen und dann ausgeben? Wenn ja wie? Ich habe hierzu echt überhaupt keine Idee. Ich hoffe ihr könnt mir helfen. Vielen Dank im Voraus.
ich habe ein Problem beim zusammenführen von zwei Arrays. Ich habe bisher leider auch noch keine Idee wie ich an diese sache heran gehen soll.
Ich habe folgenden Zustand:
Ich habe zwei Dateien, die ich aufgeteilt in mehrere Variablen (Arrays) einlese.
Zum Beispiel:
Datei Eins:
123456
234567
345678
Lese ich in drei Variablen Ein:
Dim Kennung(10) As String (Hier werden die ersten zwei Zeichen eingelesen)
Dim Wert1(10) As String (Hier die nächsten Zwei)
Dim Wert2(10) As String (Hier die nächsten Zwei)
Das gleiche mache ich mit einer zweiten Datei in drei weitere Variablen (Arrays).
Dim Kennung2(10) As String
Dim Wert1_2(10) As String
Dim Wert2_2(10) As String
Ich möchte diese Variablen nun zusammenführen bzw. gegenüberstellen.
Das ganze soll in eine Art Tabelle geschrieben werden
Kennung Wert 1 Wert 2 Wert1_2 Wert1_2
Die Ausgegabe mit nur einem Array ist relativ einfach und würde so aussehen:
Kennung Wert 1 Wert 2 Wert1_2 Wert1_2
12 34 56
23 45 67
34 56 78
Wenn im zweiten Array das Feld Kennung jedoch identisch ist mit einem Wert aus dem ersten Array, sollen die entsprechenden Werte in die schon vorhandene Zeile eingetragen werden. Wenn nicht, soll eine weitere Zeile eingefügt werden.
Wie kann ich das ganze Aufbauen? Ist eine Zuweisung bei der Ausgabe sinnvoll? Oder muss ich vorher die Arrays zusammenführen und dann ausgeben? Wenn ja wie? Ich habe hierzu echt überhaupt keine Idee. Ich hoffe ihr könnt mir helfen. Vielen Dank im Voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 149740
Url: https://administrator.de/contentid/149740
Ausgedruckt am: 16.11.2024 um 07:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo Andy1987!
Dictionary: http://msdn.microsoft.com/en-us/library/x4k5wbx4%28VS.85%29.aspx (oder auch einmal in VB 2008 Express eingeben) ...
Grüße
bastla
Dictionary: http://msdn.microsoft.com/en-us/library/x4k5wbx4%28VS.85%29.aspx (oder auch einmal in VB 2008 Express eingeben) ...
Wegen den drei Arrays - Ich wüsste nicht wie ich das Ganze sonst aufbauen soll. Gibt es sonst noch einen Weg?
Bisher kennst ja nur Du "das Ganze" - beschrieben hast Du nur (in etwa), was Du technisch gesehen machst und was Du erreichen willst - den Zweck der Aktion hast Du nicht erklärt ...Grüße
bastla
Moin Andy1987,
bastlas höflich formulierte Frage war:
Deine Antwort darauf war:
Gibt es irgendein Sender-Empfänger-Problem?
Kann ich irgendwie unterstützen?
Wenn du deinen Audi A8 bei irgendeiner Tanke reparieren lassen willst - sagst du dann auch "Ich muss damit am Wochenende bis nach Oldenburg kommen - bekommen Sie das hin bis 17h?".
Grüße
Biber
bastlas höflich formulierte Frage war:
"Bisher kennst ja nur Du "das Ganze" - beschrieben hast Du nur (in etwa), was Du technisch gesehen machst und was Du erreichen willst - den Zweck der Aktion hast Du nicht erklärt ..."
Deine Antwort darauf war:
"Ziel ist es eine Lesbare Aufstellung zu erstellen, zwei Dateien bzw. bestimmte Inhalte abgeglichen und auf Richtigkeit geprüft werden."
Gibt es irgendein Sender-Empfänger-Problem?
Kann ich irgendwie unterstützen?
Wenn du deinen Audi A8 bei irgendeiner Tanke reparieren lassen willst - sagst du dann auch "Ich muss damit am Wochenende bis nach Oldenburg kommen - bekommen Sie das hin bis 17h?".
Grüße
Biber
Hallo Andy1987!
Schematisch könntest Du das etwa so versuchen:
Unter der Annahme, dass die "Eindeutige_Nummer" zumindest in der "Datei1" tatsächlich nur je einmal vorkommen kann, wären die Zeilen 6-8 und 10 nicht erforderlich - falls aber dennoch ein Schlüssel in der ersten Datei mehrfach vorhanden wäre, würde ab dem zweiten Auftreten dem Wert "(1)" als Kennung vorangestellt ...
Um darauf hinzuweisen, dass ein Datensatz in "Datei1" nicht vorkommt, könntest Du in Zeile 18 zwischen die beiden "vbTab" noch zB "-" platzieren ...
Grüße
bastla
Schematisch könntest Du das etwa so versuchen:
Dim d = CreateObject("Scripting.Dictionary")
Dim Key As String
For i = 0 To UBound(Datei1_Eindeutige_Nummer) 'Array der Datei1 durchgehen
Key = Datei1_Eindeutige_Nummer(i)
If d.Exists(Key) Then 'Eindeutige_Nummer in Datei 1 war nicht eindeutig - ...
d.Item(Key) = d.Item(Key) & vbTab & "(1) " & Datei1_Werte(i) '... daher weiteren Wert (mit Kennzeichnung) dem Eintrag hinzufügen
Else
d.Add(Key, Key & vbTab & Datei1_Werte(i)) 'Dictionary-Eintrag hinzufügen
End If
Next
For i = 0 To UBound(Datei2_Eindeutige_Nummer) 'Array der Datei1 durchgehen
Key = Datei2_Eindeutige_Nummer(i)
If d.Exists(Key) Then
d.Item(Key) = d.Item(Key) & vbTab & Datei2_Werte(i) 'Eintrag für auch in Datei1 vorhandenen Datensatz ergänzen
Else
d.Add(Key, Key & vbTab & vbTab & Datei2_Werte(i)) 'Datensatz nur in Datei2 vorhanden - Eintrag neu erstellen
End If
Next
TextBox1.Text = Join(d.Items, vbCrLf) 'Alle Einträge unter Verwendung einer Zeilenschaltung als Trennung zu einem String kombinieren und in die (Multiline-)"TextBox1" eintragen
Um darauf hinzuweisen, dass ein Datensatz in "Datei1" nicht vorkommt, könntest Du in Zeile 18 zwischen die beiden "vbTab" noch zB "-" platzieren ...
Grüße
bastla
Hallo Andy1987, Hallo bastla!
Obwohl bastla Dein Problem ja schon ideal gelöst hat , hier trotzdem noch die etwas aufwendigere rein spielerische Array-Variante, damit's noch ein wenig interssanter wird
Hierbei unter der Annahme, dass je Datei das Kennwort nur einmal vorkommt. Außerdem habe ich das Kennwort auch nur einmal pro Eintrag verwendet.
Gruß Dieter
Obwohl bastla Dein Problem ja schon ideal gelöst hat , hier trotzdem noch die etwas aufwendigere rein spielerische Array-Variante, damit's noch ein wenig interssanter wird
Option Explicit
Const Datei1 = "123456" & vbCrLf & "234567" & vbCrLf & "345678" 'Improvisierter Dateiinhalt Datei1
Const Datei2 = "124734" & vbCrLf & "224567" & vbCrLf & "341278" 'Improvisierter Dateiinhalt Datei2
Private Sub Test()
Dim Text1 As Variant, Text2 As Variant, TextLine As Variant, Key As String, Item As String
Dim Values As Variant, ValuesSize As Long, ValuesCount As Long, i As Long
Text1 = Split(Datei1, vbCrLf) 'Textzeilen aus Datei1 in Array einlesen
Text2 = Split(Datei2, vbCrLf) 'Textzeilen aus Datei2 in Array einlesen
ValuesSize = UBound(Text1) + UBound(Text2) + 1 'Größe des Arrays = Anzahl Zeilen + 1
ReDim Values(ValuesSize, 1) As String 'Array deklarieren
ValuesCount = 0 'Array-Zähler
For Each TextLine In Text1 'Textzeilen aus Datei1 lesen
If IsNumeric(TextLine) Then 'Test Zahlenwert
Key = Left(TextLine, 2) 'Key = Kennnummer
Item = Key & " " & Mid(TextLine, 3, 2) & " " & Mid(TextLine, 5,2) 'Item = Key + Werte
Values(ValuesCount, 0) = Key 'Key in Array schreiben
Values(ValuesCount, 1) = Item 'Item in Array schreiben
ValuesCount = ValuesCount + 1 'Arrayzähler + 1
End If
Next
For Each TextLine In Text2 'Textzeilen aus Datei2 lesen
If IsNumeric(TextLine) Then 'Test Zahlenwert
Key = Left(TextLine, 2) 'Key = Kennnummer
For i = 0 To UBound(Values) 'Array nach Key durchsuchen
If Key = Values(i, 0) Then Exit For 'Wenn gefunden For-Schleife verlassen
Next
If i <= UBound(Values) Then 'Test ob Key gefunden
Item = Mid(TextLine, 3, 2) & " " & Mid(TextLine, 5,2) 'Wenn ja, Items = Werte
Values(i, 1) = Values(i, 1) & " " & Item 'Werte dem aktuellen Key hinzufügen
Else
Item = Key & " " & Mid(TextLine, 3, 2) & " " & Mid(TextLine, 5,2) 'Item = Key + Werte
Values(ValuesCount, 0) = Key 'Wenn nein, Key in Array schreiben
Values(ValuesCount, 1) = Item 'Item in Array schreiben
ValuesCount = ValuesCount + 1 'Arrayzähler + 1
End If
End If
Next
For i = 0 To UBound(Values) 'Array auslesen
If Values(i, 0) <> "" Then 'Test Leer
MsgBox Values(i, 1) 'Ausgabe eines Eintrags in Form 12 34 56 47 34
End If
Next
End Sub
Gruß Dieter