vic666
Goto Top

DateiRenamer nach Listenwerten

Breche mit gerade die Finger

Folgendes Problem:
Ich habe eine Reihe von Dateien (PDF), diese müssen anhand einer Liste (CSV) automatisch umbenannt werden.
Der Aufbau der Liste ist:

Wert1, Wert2,....Wertn, <Pfad zum Dokument>

Der Wert1 soll der Dateiname werden.

Ich stelle mir folgenden Ablauf vor:

Öffnen der CSV-Datei, auslesen der ersten Zeile, trennen der Werte, (Array?), dann umbenennen der Datei, auslesen der nächsten Zeile bis Ende.
Das sollte doch mit den FSOs möglich sein?

Gruß

Content-Key: 142979

Url: https://administrator.de/contentid/142979

Printed on: April 25, 2024 at 15:04 o'clock

Member: bastla
bastla May 17, 2010 at 15:13:51 (UTC)
Goto Top
Hallo Vic666 und willkommen im Forum!

Ungetestet etwa so:
CSV = "D:\Deine CSV-Datei.csv"  
Delim = "," 'Feldtrennzeichen  

Set fso = CreateObject("Scripting.FileSystemObject")  
T = Split(fso.OpenTextFile(CSV).ReadAll, vbCrLf)
For Each Line In T
    F = Split(Line, Delim)
    Neu = F(0)
    Alt = F(UBound(F))
    If fso.FileExists(Alt) Then fso.GetFile(Alt).Name = Neu '& ".pdf"  
Next
Da ich "Wert1" nicht kenne, habe ich in Zeile 10 noch dafür vorgesorgt, dass der Typ ".pdf" noch hinzugefügt werden muss - in diesem Fall einfach das Kommentarzeichen (') entfernen.

Nicht berücksichtigt (da von Dir auch nicht angesprochen) ist die Möglichkeit, dass es bereits eine gleichnamige Datei gibt.

Grüße
bastla
Member: vic666
vic666 May 18, 2010 at 07:29:33 (UTC)
Goto Top
Hallo Bastla,

Supi, vielen Dank! Dein code ist nicht nur gut, sondern sehr gut!!!

Bis auf ein kleines Problem, ich bekomme ein "List Index out of Bound" am Ende da T folgenden letzten Wert bekommt: : T(480) : "" : String
Den Fehler kann ich zwar mit einem on error abfangen, ist aber nicht gerade elegant.
Hast Du hier ad hoc eine Lösung?
Danke!
Gruß
vic666
Member: bastla
bastla May 18, 2010 at 09:11:23 (UTC)
Goto Top
Hallo vic666!

Pack einfach die Zeilen 7 bis10 in einen "If"-Block:
If Trim(Line) <> "" Then
Grüße
bastla
Member: vic666
vic666 May 31, 2010 at 13:41:35 (UTC)
Goto Top
Hallo Bastla,

wie es immer so ist wenn ein Script erst einmal läuft dann kommen die weiteren Anforderungen und Ausnahmen hinzu:

Es kann in der CSV-Datei passieren, das Werte innerhalb von Delimitern Zeilenumbrüche enthalten, d.h. das der String sich über mehrere Zeilen hintereinander verteilt:

wert1, wert2, we
rt3,
wert4, wertn

Wie kriege ich das gebacken????

Grüße
Vic666
Member: bastla
bastla May 31, 2010 at 14:03:31 (UTC)
Goto Top
Hallo vic666!
Es kann in der CSV-Datei passieren, das Werte innerhalb von Delimitern Zeilenumbrüche enthalten, d.h. das der String sich über mehrere Zeilen hintereinander verteilt:
Das wäre aber keine CSV-Datei mehr (da nicht mehr erkennbar, wo ein Satz = Zeile endet) - insofern wäre hier eher bei der Entstehung dieser seltsamen Datei anzusetzen ...

Sollte ich das aber falsch interpretiert haben und der Zeilenumbruch innerhalb des Feldes entspricht nicht dem Umbruch am Zeilenende (da zB nur LF ohne CR), sollte sich das per "Replace()" reparieren lassen, also etwa:
F = Split(Replace(Line,vbLf,""), Delim)
Grüße
bastla
Member: vic666
vic666 Jun 01, 2010 at 07:38:19 (UTC)
Goto Top
Hallo Bastla,

die "CSV-Datei" ist ein Export aus einer Anwendung heraus. Manipulieren kann ich hier nur leider die Feldbegrenzungs- und Trennzeichen. Und die Inhalte eines Wertes sind mit CR getrennt.
Noch mal zum Verständis der Satzaufbau an einem Besispiel:

Vorname, Nachname, Anschrift, Alter, (Dateipfad)[CR]
Vorname, Nachname, Anschrift(Teil1) [CR]
Anschrift(Teil2)[CR], Alter, (Dateipfad)[CR]
Vorname, Nachname, Anschrift(Teil1) [CR]
Anschrift(Teil2)[CR]
Anschrift(Teil3)[CR], Alter, (Dateipfad)[CR]

Gruß
vic666
Mitglied: 77559
77559 Jun 01, 2010 at 14:05:19 (UTC)
Goto Top
Hallo vic666,

da zum Umbenennen ja ein existierender Dateipfad als letztes Element gefunden werden muss, liest du solange Zeilen ein, bis das zutrifft.
Die dazwischen liegenden, fürs Umbenennen nicht nötigen Angaben verwirfst du.

Gruß
LotPings