Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung VB for Applications

GELÖST

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

Mitglied: Phoboz

Phoboz (Level 1) - Jetzt verbinden

18.02.2013 um 14:12 Uhr, 1939 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 ..
Ähnliche Inhalte
VB for Applications
Excel VBA - Auswahl aus Listbox bearbeiten
Frage von MasterSchlumpfVB for Applications1 Kommentar

Hallo Profis, ich benötige Eure Hilfe in Excel VBA. Ich lasse den Inhalt einer Tabelle in einer Listbox anzeigen. ...

Datenbanken
Access mit VBA vorgefertigte Texte an Datensatz anfügen
gelöst Frage von Dr.CornwallisDatenbanken4 Kommentare

Hallo zusammen, ich habe ein Access Formular, mit einem Kombifeld kann ich einen Benutzer auswählen, darunter ist ein Textfeld ...

Microsoft Office
Excel 2010 VBA automatisch erweitern mit Datensätze aus Tabelle
Frage von karlchristianMicrosoft Office3 Kommentare

Hallo, ich habe eine Excel Tabelle QUELLE wo Worte (Datenbanken) untereinander stehen. Diese Datenbanken versuche ich per VBA in ...

Batch & Shell
Ungewöhnliche Txt.Datei-Abfrage mit Batch
Frage von DaTobsnBatch & Shell3 Kommentare

Ich habe in einem Ordner verschiedene txtDateien, welche verschiedenes enthalten. Ich will in ALLEN txtDateien nach etwas zuvor durch ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 22 StundenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit26 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Windows 10
Automatische daten kopieren, USB zu USB unter Win10 im Hintergrund
Frage von DerEisigeWindows 1016 Kommentare

Hallo Leute, ich bin auf der Suche nach einem Skript, dass von einem USB Stick automatisch nach dem einstecken ...

SAN, NAS, DAS
Hilfe beim Einrichten eines Storages (SAN)
gelöst Frage von Vader666SAN, NAS, DAS15 Kommentare

Hallo Admins! Ich bin in einer kleineren Firma und hatte bisher mit dem Thema SAN nur in meiner Ausbildung ...