Hallo Heiko,
Post by Heiko RompelDateiname Info1|Info2|Info3|Info4
Ich möchte jetzt die im gleichen Verzeichnis wie die Textdatei liegende Datei
"Dateiname" umbenennen und zwar soll der neue Name aus Info1 bis Info4 ohne
"|" bestehen.
Die Endung der Datei (die nicht in Dateiname) enthalten ist, soll gleich
bleiben.
Zwar nicht ganz das Gesuchte, aber IMO lesbarer als die genannten
Win-NT-Skripte könnte ein Turbo-Pascal Programm sein:
PROGRAM Heiko;
const separator ='|';
VAR
control_file: TEXT;
new_fname, control_string, old_fname, rest, next: STRING;
separator_pos, space_pos, i: byte;
BEGIN
reset(control_file, paramstr(1)); (* Name von Kommandozeile *)
read(control_file, control_string);
space_pos := pos(' ', control_string);
old_filename:=copy(control_string, 1, space_pos-1);
new_fname := '';
rest:= copy(control_string, space_pos+1, length(control_string));
FOR I:= 1 TO 3 DO
BEGIN
separator_pos:= pos(separator, rest);
next:= copy(rest, 1, separator_pos - 1);
rest:= copy(rest, separator_pos + 1, length(rest));
concat(new_fname, next)
END;
concat(new_fname, rest);
rename(old_fname, new_fname)
END.
Hier ist aber die Dateiendung noch nicht berücksichtigt. Wenn man in
Turbo-Pascal direkt DOS-Befehle absetzen kann (?), müsste auch das
lösbar sein mit wildcards beim Umbenennen.
Schwieriger wird es, wenn der Name der umzubenennenden Datei
Leerzeichen enthält => mit pos() das letzte Leerzeichen suchen in einer
While-Schleife.
Der Entwurf ist doch etwas lang geraten. Eine Funktion zum Aufspalten
von Zeichenketten in einen linken und rechten Teil um ein Trennzeichen
kann helfen.
Ich gehe davon aus, daß das control_file selbst von einem Programm
erstellt wird, sonst würdest Du ja von Hand umbenennen.
Evt. ist es einfacher, dieses Programm unter die Lupe zu nehmen und zu
ergänzen.
Der Abend war lang, und ich bin schon etwas aus der Übung gekommen -
verbessert mich nötigenfalls bitte.
Ein awk-Hase wäre wohl auch schneller fertig.
Viele Grüße, Ludwig