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
GELÖST

VBA zwei txt.Dateien, Datensätze anhand von Suchkriterien lokalisieren , Datensätze bearbeiten

Frage Entwicklung VB for Applications

Mitglied: Phoboz

Phoboz (Level 1) - Jetzt verbinden

18.02.2013 um 14:12 Uhr, 1895 Aufrufe, 11 Kommentare

Guten Tag,

könntet ihr mir bitte helfen, bin ein VBA-Anfänger, habe zwar schon einiges gemacht allerdings nur mit xls. Dateien. Bei dieser Aufgabe habe ich 2 .txt-Dateien diese sehen wie folgt aus:

Datei 1:

<Titel>
<ID>657</ID>
<Artist>ABBA</Artist>
<Album>ABBA Gold</Album>
<Path>C:/Music/money.mp3/Abba/Abba Gold/</Path>
<Info>...</Info>
</Titel>

<Titel>
<ID>111</ID>
<Artist>ABBA</Artist>
<Album>ABBA Gold</Album>
<Path>C:/Music/Abba/Abba Gold/Waterloo.mp3</Path>
<Rating>5</Rating>
<Info>...</Info>
</Titel>

<Titel>
<ID>012</ID>
<Artist>ABBA</Artist>
<Album>ABBA Gold</Album>
<Path>C:/Music/Abba/Mama Mia.mp3/Abba Gold</Path>
<Rating>4</Rating>
<Info>...</Info>
</Titel>


Datei 2:

<Titel>
<ID>555</ID>
<Artist>ABBA</Artist>
<Album>ABBA Gold</Album>
<Path>C:/Music/Abba/Abba Gold/Mama Mia.mp3</Path>
<Rating>3</Rating>
<Info>...</Info>
</Titel>

<Titel>
<ID>560</ID>
<Artist>ABBA</Artist>
<Album>ABBA Gold</Album>
<Path>C:/Music/Abba/Abba Gold/Waterloo.mp3</Path>
<Info>...</Info>
</Titel>

<Titel>
<ID>570</ID>
<Artist>ABBA</Artist>
<Album>ABBA Gold</Album>
<Path>C:/Music/Abba/Abba Gold/money.mp3</Path>
<Rating>3</Rating>
<Info>...</Info>
</Titel>


Die Aufgabe hierzu ist wie folgt. Wie ihr seht gibt es in diesen Txt. Dateien jeweils 3 Datensätze. Ein Datensatz beginnt immer mit <Titel> und endet mit </Titel> und besteht aus Artist, Album, Pfad, Rating und Info. Das Rating aus Datei1 soll in Datei2 übernommen werden.

D.h. der Programmablauf sollte in etwa so aussehen: Erstelle Datei3 (leere txt.Datei). Kopiere ersten Datensatz (<Titel>...</Titel> aus Datei2 und Suche den selben Datensatz anhand von "Artist", "Album" und "/*.mp3" (in Path) in Datei1. Ersetze Rating in dem Datensatz von Datei2 der dem Datensatz von Datei1 entspricht, das ganze steht dann korrekt in Datei3.

wenn das Rating in Datei 1 nicht vorhanden ist soll es auch in Datei3 nicht vorhanden sein.


Könnt ihr mir bitte helfen.


Grüße

Phoboz


Mitglied: Phoboz
18.02.2013, aktualisiert um 14:38 Uhr
Edit: Der Pfad unterscheidet sich zwischen Datei1 und Datei2. Das ist ebenfalls tricky...

(Siehe oben Datei1 und Datei2)
Bitte warten ..
Mitglied: bastla
18.02.2013 um 16:01 Uhr
Hallo Phoboz und willkommen im Forum!

Was hast Du denn schon, wo klemmt's noch? Poste doch mal Deinen bisherigen Ansatz (unter Verwendung der "Code"-Formatierung) ...

Grüße
bastla
Bitte warten ..
Mitglied: Phoboz
18.02.2013 um 17:05 Uhr
Hallo Bastla,

ich bin soweit, dass ich die beiden Dateien öffne und er den Inhalt in zwei Variablen schreibt. Ab diesem Punkt kriege ich nicht wirklich einen Ansatz hin, wie ich ihm sage, dass er sich den ersten Datensatz aus Datei2 nehmen soll (<Titel> bis </Titel> und diesen in Datei 3 schreibt. Danach soll er ja den Datensatz aus Datei1 suchen der durch die Suchkriterien Artist, Album und Path (/*mp3/) dem aus Datei2 entspricht und das Rating auf Datei1 anpassen.

habe den Code leider auf einem anderem Rechner. Werde diesen aber morgen einmal posten, aber vllt. könnt ihr damit schon was anfangen.

Das Suchkriterium: Album, Artist und Path ist auch ein bisschen problemmatisch, da Path ja in Datei2 etwas anders ausscht deswegen soll er der Zeile Path nur nach /*mp3/ suchen. (*=soundtrack von Datei1).
Bitte warten ..
Mitglied: bastla
18.02.2013, aktualisiert um 18:06 Uhr
Hallo Phoboz!

Soferne Du nicht ohnehin XML-spezifische Elemente verwenden sollst, würde ich Dir das VBS-RegExp-Objekt (kannst Du unter VBA mit
Set regEx = CreateObject("VBScript.RegExp")
anstelle von
Set regEx = New RegExp
in VBS erzeugen) empfehlen ...

Um aus dem Pfad den Dateinamen zu isolieren könntest Du "Split()" oder "InStrRev()" und "Right()" oder am einfachsten die "GetFileName"-Methode des "FileSystemObject"s verwenden.

Grüße
bastla
Bitte warten ..
Mitglied: Phoboz
18.02.2013 um 18:06 Uhr
Hallo,

muss es in VBA machen ist so in der Aufgabe vorgegeben
Bitte warten ..
Mitglied: bastla
18.02.2013 um 18:08 Uhr
Hallo Phoboz!

Ist auch kein Beinbruch - nur eben vergleichsweise unelegant ...

BTW: Womit liest Du denn in VBA die Dateiinhalte ein?

Grüße
bastla
Bitte warten ..
Mitglied: Phoboz
18.02.2013 um 19:30 Uhr
Hi Bastla,

ich schick morgen hierzu mal n bissl Code! Danke für die Hilfe schonma
Bitte warten ..
Mitglied: Phoboz
19.02.2013, aktualisiert um 07:49 Uhr
So anbei einmal der Code, den ich bis jetzt hab, er soll eigentlich die Dateien öffnen und den Inhalt in einer Variablen schreiben allerdings ist hier ab "TXT1" iwie ein Fehler der Debugger meckert direkt rum.


01.
Sub TraRating 
02.
 
03.
Dim Datei1 As String 
04.
Dim Datei2 As String 
05.
Dim TXT1 As String 
06.
Dim TXT2 As String 
07.
Dim fs 
08.
 
09.
MsgBox "Bitte wählen Sie die erste txt.Datei aus." 
10.
Datei1 = Application.GetOpenFilename _ 
11.
("Micrsoft Text-Dateien (*.txt),*.txt") 
12.
       
13.
MsgBox "Bitte wählen Sie die zweite txt.Datei aus." 
14.
Datei2 = Application.GetOpenFilename _ 
15.
("Micrsoft Text-Dateien (*.txt),*.txt") 
16.
 
17.
Set fs = CreateObject("Scripting.FileSystemObject") 
18.
                
19.
Set OpenDatei1 = fs.OpenTextFile(Datei1, 1) 
20.
TXT1 = Split(OpenDatei1.ReadAll, vbCrLf) 
21.
OpenDatei1.Close 
22.
 
23.
Set OpenDatei2 = fs.OpenTextFile(Datei2, 1) 
24.
TXT2 = Split(OpenDatei2.ReadAll, vbCrLf) 
25.
OpenDatei2.Close 
26.
       
27.
End Sub
Bitte warten ..
Mitglied: bastla
19.02.2013, aktualisiert um 07:37 Uhr
Hallo Phoboz!

Der Fehler passiert nicht in Zeile 20, sondern in Zeile 5 - wenn Du "Split()" verwendest, entsteht aus dem String ein Array ...
Noch zu
muss es in VBA machen
Da Du das "Scripting.FileSystemObject" (kein VBA-Element) verwendest (verwenden darfst), wäre es nur konsequent, auch "VBScript.RegExp" einzusetzen - die Sprache der "Umgebung" bleibt in beiden Fällen VBA.

Grüße
bastla
Bitte warten ..
Mitglied: Phoboz
19.02.2013 um 07:41 Uhr
wie gesagt danach weiß ich leider nicht wie ich weiterkomme, in Excell hat man ja Zellen. Wie bewegt man sich in Txt.Dateien. Kann man da auch richtig Zeile für Zeile abfragen? Bzw. geht das überhaupt das man ihm sagt Datensatz1 = <Titel> bis </Titel> und suche den Datensatz aus Datei2 der Datensatz1 entspricht anhand von Album, Artist und einem Teilstring von Path ("/*.mp3/)? Und wie kommt man dann zum nächsten Datensatz den man machen möchte?
Bitte warten ..
Mitglied: Phoboz
19.02.2013 um 09:23 Uhr
Hallo,

der untenstehende Code macht jetzt folgendes:
Er nimmt die Datensätze aus Datei2 (diese sind bis auf das Rating korrekt) und schreibt sie in Datei3, die neu generiert wird.

01.
Sub TraRating() 
02.
 
03.
Dim Datei1 
04.
Dim Datei2 
05.
Dim Datei3 
06.
 
07.
Dim txt 
08.
 
09.
Dim fso 
10.
 
11.
MsgBox "Bitte wählen Sie die erste txt.Datei aus." 
12.
Datei1 = Application.GetOpenFilename _ 
13.
("Micrsoft Text-Dateien (*.txt),*.txt") 
14.
       
15.
MsgBox "Bitte wählen Sie die zweite txt.Datei aus." 
16.
Datei2 = Application.GetOpenFilename _ 
17.
("Micrsoft Text-Dateien (*.txt),*.txt") 
18.
 
19.
Open Datei1 For Input As #1 
20.
Open Datei2 For Input As #2 
21.
 
22.
Set fso = CreateObject("Scripting.FileSystemObject") 
23.
    Set Datei3 = fso.CreateTextFile("M:\Datei3.txt", True) 
24.
 
25.
i = 1 
26.
    Do While Not EOF(2) 
27.
        Line Input #2, txt 
28.
        Datei3.WriteLine (txt) 
29.
        i = i + 1 
30.
    Loop 
31.
Close #2 
32.
Close #1 
33.
 
34.
End Sub
Jetzt muss ich iwie wissen, wie ich es hinbekomme, dass er die Datensätze, die immer von <Titel> bis </Titel> gehen anhand von <Album>...</Album>, <Artist>...</Artist> und einen Teilstring von <Path>../*.mp3/</Path> indentifizieren kann.

Ich sag ihm also beginne bei <Titel> und ende bei </Titel> in Datei3 = Datensatz
Gucke in Datei1 und suche den gleichen Datensatz anhand von <Album>...</Album>, <Artist>...</Artist> und einen Teilstring von <Path>../*.mp3/</Path> und kopieren die Zeile <Rating> ... </Rating> und setze sie unter die Zeile <Path> in Datei3 in dem bestimmten Datensatz.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Server
Große Dateien mit externen Partnern bearbeiten (4)

Frage von Matsushita zum Thema Windows Server ...

Microsoft Office
gelöst Per VBA im Verzeichniss dateien mit Wildcard umbenennen (4)

Frage von usenussi zum Thema Microsoft Office ...

Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (22)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...