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

DateiRenamer nach Listenwerten

Frage Entwicklung VB for Applications

Mitglied: vic666

vic666 (Level 1) - Jetzt verbinden

17.05.2010, aktualisiert 16:40 Uhr, 2100 Aufrufe, 7 Kommentare

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ß
Mitglied: bastla
17.05.2010 um 17:13 Uhr
Hallo Vic666 und willkommen im Forum!

Ungetestet etwa so:
01.
CSV = "D:\Deine CSV-Datei.csv" 
02.
Delim = "," 'Feldtrennzeichen 
03.
 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
T = Split(fso.OpenTextFile(CSV).ReadAll, vbCrLf) 
06.
For Each Line In T 
07.
    F = Split(Line, Delim) 
08.
    Neu = F(0) 
09.
    Alt = F(UBound(F)) 
10.
    If fso.FileExists(Alt) Then fso.GetFile(Alt).Name = Neu '& ".pdf" 
11.
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
Bitte warten ..
Mitglied: vic666
18.05.2010 um 09:29 Uhr
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
Bitte warten ..
Mitglied: bastla
18.05.2010 um 11:11 Uhr
Hallo vic666!

Pack einfach die Zeilen 7 bis10 in einen "If"-Block:
If Trim(Line) <> "" Then
Grüße
bastla
Bitte warten ..
Mitglied: vic666
31.05.2010 um 15:41 Uhr
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
Bitte warten ..
Mitglied: bastla
31.05.2010 um 16:03 Uhr
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
Bitte warten ..
Mitglied: vic666
01.06.2010 um 09:38 Uhr
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
Bitte warten ..
Mitglied: LotPings
01.06.2010 um 16:05 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...