gelöst: Bereichsabfrage in Script und ungewollte Steuerzeich

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
TuxPeter
Beiträge: 2023
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

gelöst: Bereichsabfrage in Script und ungewollte Steuerzeich

Beitrag von TuxPeter » 08.06.2009 22:44:24

Liebe Debianfreunde,

nachdem ich feststellen musste, daß die Tag-Eingabe über easyTAG eine reine Strafarbeit ist und ich außerdem bereits Textdateien schon früher erstellt hatte, habe ich das Taggen mit folgendem kleinen Script vorgenommen. Bearbeitet werden alle mp3-Dateien eines Verzeichnisses, für die in der Textdatei Vorgaben vorhanden sind.

Code: Alles auswählen

# eyeD3tag tagged vorh. mp3-Datein (mit führender Track-Nr) mittels eyeD3 
# nach einer Text-Datei folgender Struktur:
#
# 01 Titel
# Artist
#
# Artist kann weggelassen werden (Leerzeile!)

while read num tit ; do     
  if [ -n "$num" ] ; then 
     read art
     # Dateinamen komplettieren
     oldnam=$(ls $num*)
     echo "Datei:" $oldnam
     # neuen Dateinamen aus Track-Nr, Artist u. Titel zusammenbauen
     newnam=""
     if [ -n "$art" ] ; then
         # Blank durch Underscore ersetzten und Trennstrich anhängen
         newnam=${art//\ /_}-
     fi 
     # endgültig zusammensetzen
     newnam=$num\_$newnam${tit//\ /_}
     eyeD3 --title="$tit" --artist="$art" --track="$num" $oldnam 
     mv $oldnam $newnam.mp3
  fi
done
Das funktioniert auch soweit, allerdings konnte ich trotz Probierens und Nachlesens zwei Probleme nicht lösen:

1. Sehr gern hätte ich eine Abfrage auf den Bereich der Track-Nummer zwischen 01 und 99, das würde die Datei viel flexibler ermöglichen. Aber alle Versuche mit sowas wie

Code: Alles auswählen

if [ ("$num">"00") && ("$num"<"99") ] ;
oder ähnlich gingen voll daneben.

2. Gelegentlich lief das Script ein wenig Amok. Es zeigte sich, dass ungewollte Steuerzeichen im Datenfile waren. Die vorh. Textdatein habe ich mit gedit unter Gnome editiert, wozu auch Suchen und Ersetzen und Einfügen von Leerzeilen gehört. Gedit hat allerdings unaufgefordert, für mich völlig undurchsichtig das Steuerzeichen ^M eingefügt. Könnte das Dateinamens-gesteuert sein? Die Dinger haben Namen wie CD-13-tape22ab.txt, aber DOS-Zeilenumbrüche sind vor dem Editieren keine mehr drin gewesen. Mit vi bzw vim habe ich die ^M dann weggeputzt, dann ging es. Leider konnte ich hier auch nicht Suchen / Ersetzen verwenden, da ich das nur für druckbare Zeichen hinbekommen habe. Das ^M irgendwie bei der Sucheingabe in vi mit \ zu maskieren, ist mir nicht gelungen - also viel mehr Handarbeit als nötig.

Vielleicht kann mir jemand zu den Problemchen einen hilfreichen Tipp geben?

Im Voraus vielen Dank
debdepp
Zuletzt geändert von TuxPeter am 09.06.2009 22:23:04, insgesamt 1-mal geändert.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Bereichsabfrage in Script und ungewollte Steuerzeichen

Beitrag von gms » 09.06.2009 07:46:49

debdepp hat geschrieben: 1. Sehr gern hätte ich eine Abfrage auf den Bereich der Track-Nummer zwischen 01 und 99, das würde die Datei viel flexibler ermöglichen. Aber alle Versuche mit sowas wie

Code: Alles auswählen

if [ ("$num">"00") && ("$num"<"99") ] ;
oder ähnlich gingen voll daneben.
dann versuche es einmal mit

Code: Alles auswählen

if [ "$num" -gt 0 ] && [ "$num" -lt 99 ];
debdepp hat geschrieben: Das ^M irgendwie bei der Sucheingabe in vi mit \ zu maskieren, ist mir nicht gelungen - also viel mehr Handarbeit als nötig.

Vielleicht kann mir jemand zu den Problemchen einen hilfreichen Tipp geben?
es gibt viele Möglichkeiten diese Steuerzeichen zu entfernen:

Code: Alles auswählen

cat x.txt | tr -d '\r' >y.txt
dos2unix x.txt
Im vi kannst du das '^M' mit Ctlr-v Ctrl-m eigeben

Gruß
gms

TuxPeter
Beiträge: 2023
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

Re: Bereichsabfrage in Script und ungewollte Steuerzeichen

Beitrag von TuxPeter » 09.06.2009 08:20:20

Hallo gms,

vielen Dank für die superschnelle Antwort! Werde ich baldmöglichst ausprobieren.

Grüße, debdepp

TuxPeter
Beiträge: 2023
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

Erfolgsbericht

Beitrag von TuxPeter » 09.06.2009 22:21:20

So, nun noch die kleine Erfolgsmeldung:

Zu 1) Die Abfrage lautet jetzt

Code: Alles auswählen

 if [ -n "$num" ] && [ "$num" -gt 0 ] && [ "$num" -lt 99 ];
damit werden alle Leerzeilen sowie Kommentarzeilen überlesen und, von der Track-Nr getriggert, jeweils 2 Zeilen verarbeitet. Angedacht war von mir ja eine String-Abfrage, die durch Stringvergleich den Wertebereich zwischen "01" und "98" erfasst, damit gäbe es auch kein Gemecker wegen nichtnumerischer Werte. Das scheint aber schwieriger zu sein. Jedoch es funktioniert zuverlässig so, und die Fehler kann man ja mit "2> /dev/null" zum Teufel schicken.

2) Die ursprünglichen Textdateien sind tatsächlich komplett mit alten DOS - CR-LF Zeilenumbrüchen versehen. Vi hat mir das aber nicht gezeigt, da nicht im Binärmodus "vi -b text" aufgerufen. Nachdem dann durch Umrühren des Textes mit gedit die alte DOS-Ordnung gestört ist, zeigt vi die "^M" auch im Standardmodus an - etwas irritierend. dos2unix habe ich mir nicht extra installiert, aber

Code: Alles auswählen

cat x.txt | tr -d '\r' > y.txt 
ist ganz prima!

Grüße,
debdepp

Benutzeravatar
h4ppy
Beiträge: 51
Registriert: 03.06.2004 19:14:35
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Swiss

Re: gelöst: Bereichsabfrage in Script und ungewollte Steuerzeich

Beitrag von h4ppy » 10.06.2009 18:06:32

gug hier
http://bloga.ch/happy/?p=101

Zweiter Abschnitt
Gruss
Debian 7 + KDE
In der Kürze liegt die Würze - Wer Fehler findet, darf sie behalten.

Antworten