Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Strings zusammenfügen

Frage Entwicklung VB for Applications

Mitglied: Andy1987

Andy1987 (Level 1) - Jetzt verbinden

25.08.2010 um 20:42 Uhr, 6233 Aufrufe, 10 Kommentare

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.
Mitglied: bastla
25.08.2010 um 21:00 Uhr
Hallo Andy1987!

Ich frage jetzt mal nicht, wozu das jeweils 3 Arrays sein müssen und noch nicht mal, welches VB Du eigentlich verwendest, ...

... sondern werfe nur kurz das Stichwort "Dictionary" in die (beginnende) Diskussion ...

Grüße
bastla
Bitte warten ..
Mitglied: Andy1987
26.08.2010 um 07:48 Uhr
Guten Tag,

ich verwende VB 2008 Express.

Wegen den drei Arrays - Ich wüsste nicht wie ich das Ganze sonst aufbauen soll. Gibt es sonst noch einen Weg?

Was meinst du mit "Dictionary"?
Bitte warten ..
Mitglied: bastla
26.08.2010 um 08:48 Uhr
Hallo Andy1987!

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
Bitte warten ..
Mitglied: Andy1987
26.08.2010 um 19:25 Uhr
Den Link sehe ich mir mal an.

Ziel ist es eine Lesbare Aufstellung zu erstellen, zwei Dateien bzw. bestimmte Inhalte abgeglichen und auf Richtigkeit geprüft werden.
Bitte warten ..
Mitglied: bastla
26.08.2010 um 19:33 Uhr
Hallo Andy1987!

Na ja, wenn das so ist wundert es mich ja schon fast, dass Du mit je 3 Arrays auskommst (wenn man/frau nur mal an die differenzierte Darstellung der Delta-Datenwerte denkt) ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
26.08.2010 um 20:04 Uhr
Moin Andy1987,

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
Bitte warten ..
Mitglied: Andy1987
27.08.2010 um 08:31 Uhr
Also Okay ich probiere es noch mal.

Ich habe zwei Dateien, die ich in mehrere Variablen [Arrays) einlese. Hier bei gibt es in beiden Dateien eine eindeutige Nummern. Diese Nummern sind auch extra Variablen eingelesen.
Die Werte aus den Variablen sollen in einer Tabelle gegenübergestellt ausgegeben werden:

Bespiel:

Datei1_Eindeutige_Nummer(1) = 10 Datei1_Werte(1) = abc
Datei1_Eindeutige_Nummer(2) = 20 Datei1_Werte(2) = 123
Datei1_Eindeutige_Nummer(3) = 30 Datei2_Werte(3) = xyz

Datei2_Eindeutige_Nummer(1) = 10 Datei2_Werte(1) = abc
Datei2_Eindeutige_Nummer(2) = 20 Datei2_Werte(2) = 123
Datei2_Eindeutige_Nummer(4) = 40 Datei2_Werte(3) = 789

Diese beiden Arrays sollen jetzt in einer Art Tabelle ausgegeben werden. Hierfür will ich Textboxen nehmen. Was auch kein Problem ist.

Die Ausgabe soll wie folgt aussehen:

Datei1 Eindeutige Nummer Datei1_WErte Datei2_EindeutigeNummer Datei2_Wertze
10 abc 10 abc
20 123 20 123
30 xyz
40 789
Bitte warten ..
Mitglied: bastla
27.08.2010 um 10:28 Uhr
Hallo Andy1987!

Schematisch könntest Du das etwa so versuchen:
01.
        Dim d = CreateObject("Scripting.Dictionary") 
02.
        Dim Key As String 
03.
 
04.
        For i = 0 To UBound(Datei1_Eindeutige_Nummer) 'Array der Datei1 durchgehen 
05.
            Key = Datei1_Eindeutige_Nummer(i) 
06.
            If d.Exists(Key) Then 'Eindeutige_Nummer in Datei 1 war nicht eindeutig - ... 
07.
                d.Item(Key) = d.Item(Key) & vbTab & "(1) " & Datei1_Werte(i) '... daher weiteren Wert (mit Kennzeichnung) dem Eintrag hinzufügen 
08.
            Else 
09.
                d.Add(Key, Key & vbTab & Datei1_Werte(i)) 'Dictionary-Eintrag hinzufügen 
10.
            End If 
11.
        Next 
12.
 
13.
        For i = 0 To UBound(Datei2_Eindeutige_Nummer) 'Array der Datei1 durchgehen 
14.
            Key = Datei2_Eindeutige_Nummer(i) 
15.
            If d.Exists(Key) Then 
16.
                d.Item(Key) = d.Item(Key) & vbTab & Datei2_Werte(i) 'Eintrag für auch in Datei1 vorhandenen Datensatz ergänzen 
17.
            Else 
18.
                d.Add(Key, Key & vbTab & vbTab & Datei2_Werte(i)) 'Datensatz nur in Datei2 vorhanden - Eintrag neu erstellen 
19.
            End If 
20.
        Next 
21.
 
22.
        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
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
Bitte warten ..
Mitglied: 76109
27.08.2010 um 11:42 Uhr
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
01.
Option Explicit 
02.
 
03.
Const Datei1 = "123456" & vbCrLf & "234567" & vbCrLf & "345678"	'Improvisierter Dateiinhalt Datei1 
04.
Const Datei2 = "124734" & vbCrLf & "224567" & vbCrLf & "341278"	'Improvisierter Dateiinhalt Datei2 
05.
 
06.
Private Sub Test() 
07.
    Dim Text1 As Variant, Text2 As Variant, TextLine As Variant, Key As String, Item As String 
08.
    Dim Values As Variant, ValuesSize As Long, ValuesCount As Long, i As Long 
09.
     
10.
    Text1 = Split(Datei1, vbCrLf)   'Textzeilen aus Datei1 in Array einlesen 
11.
    Text2 = Split(Datei2, vbCrLf)   'Textzeilen aus Datei2 in Array einlesen 
12.
     
13.
    ValuesSize = UBound(Text1) + UBound(Text2) + 1  'Größe des Arrays = Anzahl Zeilen + 1 
14.
     
15.
    ReDim Values(ValuesSize, 1) As String           'Array deklarieren 
16.
     
17.
    ValuesCount = 0                                 'Array-Zähler 
18.
     
19.
    For Each TextLine In Text1                      'Textzeilen aus Datei1 lesen 
20.
        If IsNumeric(TextLine) Then                 'Test Zahlenwert 
21.
            Key = Left(TextLine, 2)                 'Key = Kennnummer 
22.
            Item = Key & " " & Mid(TextLine, 3, 2) & " " & Mid(TextLine, 5,2)  'Item = Key + Werte 
23.
            Values(ValuesCount, 0) = Key            'Key in Array schreiben 
24.
            Values(ValuesCount, 1) = Item           'Item in Array schreiben 
25.
            ValuesCount = ValuesCount + 1           'Arrayzähler + 1 
26.
        End If 
27.
    Next 
28.
     
29.
    For Each TextLine In Text2                      'Textzeilen aus Datei2 lesen 
30.
        If IsNumeric(TextLine) Then                 'Test Zahlenwert 
31.
            Key = Left(TextLine, 2)                 'Key = Kennnummer 
32.
            For i = 0 To UBound(Values)             'Array nach Key durchsuchen 
33.
                If Key = Values(i, 0) Then Exit For 'Wenn gefunden For-Schleife verlassen 
34.
            Next 
35.
             
36.
            If i <= UBound(Values) Then             'Test ob Key gefunden 
37.
                Item = Mid(TextLine, 3, 2) & " " & Mid(TextLine, 5,2) 'Wenn ja, Items = Werte 
38.
                Values(i, 1) = Values(i, 1) & " " & Item    'Werte dem aktuellen Key hinzufügen 
39.
            Else 
40.
                Item = Key & " " & Mid(TextLine, 3, 2) & " " & Mid(TextLine, 5,2) 'Item = Key + Werte 
41.
                Values(ValuesCount, 0) = Key        'Wenn nein, Key in Array schreiben 
42.
                Values(ValuesCount, 1) = Item       'Item in Array schreiben 
43.
                ValuesCount = ValuesCount + 1       'Arrayzähler + 1 
44.
            End If 
45.
        End If 
46.
    Next 
47.
     
48.
    For i = 0 To UBound(Values)     'Array auslesen 
49.
        If Values(i, 0) <> "" Then  'Test Leer 
50.
            MsgBox Values(i, 1)     'Ausgabe eines Eintrags in Form 12 34 56 47 34 
51.
        End If 
52.
    Next 
53.
End Sub
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
Bitte warten ..
Mitglied: Andy1987
27.08.2010 um 13:07 Uhr
Vielen Dank für die Antworten. Ich werde das Ganze heute Abend in Ruhe testen und rückmeldung erstatten.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst 2 Csv -Dateien zum Teil zusammenfügen (6)

Frage von Piotrney zum Thema Batch & Shell ...

Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...