Nullauffüllung in V. 1.3.6

  • Hallo,
    wie kann man die Nullauffüllung der Dateinamennummerierung bei "Mehrere Dateien Exportieren" wieder bekommen, wie sie in Version 1.2.x war? Das neue Audacity nummeriert die Dateien ohne führende Nullen, so daß die lexikalische Reihenfolge verloren geht.
    1
    10
    11
    12
    13
    2
    3
    4
    usw.


    Gibts dafür eine Lösung?
    Stefan

  • Ich hätte mal gerne gewußt, wer von Euch die besagte Dateinamen-Nummerierung verwendet und wer davon die Nummerierung mit uneinheitlicher Stellenzahl, so wie sie jetzt ist, ebenso wie ich, hinderlich findet.
    Danke! - Stefan

  • Ich verfolge das Problem jetzt nur so am Rande, weil ich diese Funktion auch erst vor kurzem 1-2 mal verwendet habe. Da allerdings habe ich jedem Sekment einen eigenen Namen gegeben (weil ich die zum einen als Wave (für eine Audio-CD) und zugleich auch als MP3 abgelegt haben wollte). Daher kann ich auch nicht sagen, ob das Problem schon bei 1.3.4 so war / ist und auch nicht, ob es in Zukunft geändert wird.


    Allerdings ist mir so, als wenn XP bei reiner Nummerierung 2 vor einer 10 setzen kann. Vielleicht ist es auch nur bei einigen Plattformen ein Problem für die Entwickler, weil sie davon ausgehen, das System XY das richtig sortiert.

  • Danke für die Rückmeldung! Eine Anmerkung noch, auch auf die Diskussion hier http://www.audacity-forum.de/post/15883:
    Es gibt für diese Frage kein richtig oder falsch! Beide Sortiermethoden - die nummerische und die lexikalische - haben ihre Berechtigung. Das Programm sollte IMHO so kofigurierbar sein, daß man die Anzahl der Dezimalstellen vorgeben kann. Der Wert 1 wäre dann das Verhalten, wie jetzt, nämlich eine Stelle und erst ab 10 zwei Stellen. Der Wert 2 würde von vornherein eine führende Null setzen usw. Übliche Formatierfunktionen für diverse Programmiersprachen lassen sowas mittels Formatstring sehr bequem mit ein paar Zeichen erledigt sein.


    Bei der Freeware "Lupas Rename" wird sowas gemacht. Der Screenshoot zeigt, wie die Benutzeroberfläche dazu aussehen kann
    http://rename.lupasfreeware.or…umbering_by_directory.gif
    Mit drei Eingabefeldern läßt sich einstellen, mit welcher Nummer begonnen werden soll, das Inkrement und die Stellenzahl.

  • Was sich auf die Schnelle herausfinden liess. Ausschnitt aus dem Audacity Code, Datei "audacity-src/src/export/ExportMultiple.cpp", Zeilen 612 bis 615:

    Code
    ---
    612   // Numbering files...
    613   if (!byName) {
    614      name.Printf(wxT("%s-%d"), prefix.c_str(), l+1);
    615   }
    ---


    Die Dateinummer wird über die wxWidgets Funktion "wxT" erzeugt. "%s" ist ein string (Zeichenkette), das ist der erste Teil des Dateinamens, wie er im "Mehrere Dateien exportieren" Fenster von Audacity eingegeben werden kann, "-" ist das Minus Zeichen und "%d" ist eine Dezimalzahl. Offenbar wird diese Dezimalzahl von wxWidgets für Windows ohne führende Nullen interpretiert. Warum das so ist muss aus der wxWidgets Dokumentation herausgelesen werden.


    Die wxWidgets Homepage ist: http://www.wxwidgets.org/


    Viel mehr weiss ich auch nicht.

  • Halbe Stunde später: weder unter "Windows Start Menü > Hilfe > Befehlszeilenreferenz" (sort, rename, etc.) noch unter "Start Menü > Hilfe > Batchparameter" finde ich Möglichkeiten, das Dateinummernformat oder die Sortierreihenfolge von Windows zu ändern oder eine andere Möglichkeit, die Dateien ins alte DOS Nummernformat umzubenennen.


    Frage an stme: hast Du (oder irgend jemand anders) vielleicht sonst noch irgendeine Idee wie sich das mit Windows "bord-eigenen" Mitteln das von Audacity ausgegebene Dateinummern Format nachträglich ändern liesse? Du hattest geschrieben, dass das irgendwo einstellbar wäre.


    Die ansonsten einfachste Möglichkeit (kommt drauf an, was "einfach" bedeuten soll), die mir einfällt, wäre ein AWK Skript oder irgendwas ähnliches zu schreiben, das die Dateinummern nachträglich ändert. (AWK für Windows ist weniger als 200kB gross).


  • Das Script sagt nur aus, das die nachfolgende, abzuspeichernde Datei (sofrn kein Namen vergeben wurde), mit eine Nummer nach der letzten abgespeichert werden soll. Innerhalb der Funktion, soweit ich das Script verstehe, wird 1-9 nur einstellig wiedergegeben. Wie das in C++ aussieht kann ich nur erahnen.


    Nach der Abfrage, wegen dem vergebenen Namen, müßte das Script (vom Sinn her) ungefähr so aussehen.
    if ($xy<10) {$xy="0".$xy};

  • @edgar:
    Es lässt sich das Verhalten einstellen, wie der Explorer die Dateien sortiert, wenn er bestimmte Nummernformate vorfindet. Die Formate selbst ändert er natürlich nicht.


    Sortierreihenfolge im Explorer, wie bei Win2000 (lexikalisch):


    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
    DWORD-Wert
    NoStrCmpLogical=1


    Löschen des Wertes oder
    NoStrCmpLogical=0
    ergibt neue Reihenfolge á la XP (nummerisch).


    Als Registry-Datei:
    ----------- schnipp -------------------------
    Windows Registry Editor Version 5.00


    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
    "NoStrCmpLogical"=dword:00000001
    ------------ schnapp ------------------------
    0 eintragen oder 1 lassen, Speichern als z.B. "Sortierung.reg", dann doppelklicken. Es kann sein, daß man sich danach kurz abmelden muß, damit der Explorer die neue Einstellung einliest.

  • Jetzt echt? Und wenn Du mehr als 99 oder weniger als 10 Tracks hast?


    Was wirklich hilfreich wäre: wenn Du die aktuelle Audacity-Version anpassen würdest, indem Du eine neue Option "Zahlen in Dateinamen mit führenden Nullen auffüllen" zum Mehrere-Dateien-Exportieren-Dialogfeld hinzufügst, dann die entsprechende Maximalanzahl der Stellen bestimmt und den entsprechenden "%0Xd"-Code generiert. Dann hätten wir das vorhandene und das von Dir gewünschte Verhalten und könnten zwischen beidem umschalten. Das Ganze bitte als Patch im Unified-Diff-Format an die Mailingliste, dabei bitte die Audacity-Coding-Konventionen beachten und das Ganze auch vorher ausgiebig testen. Das ist das, was Zeit braucht und Umstände macht. Wie man in einem Einzelfall einen Nuller vor eine Zahl hinzufügt, wissen sogar die Audacity-Programmierer schon.

  • Nachdem was da oben herum spekuliert wurde:

    Zitat


    und "%d" ist eine Dezimalzahl. Offenbar wird diese Dezimalzahl von wxWidgets für Windows ohne führende Nullen interpretiert. Warum das so ist muss aus der wxWidgets Dokumentation herausgelesen werden.


    hatte ich nicht den Eindruck, daß dieses Wissen in der Leserschaft hier vorhanden ist. Daß die Programmierer so schlau sind, will ich doch wohl stark hoffen!


    Zitat


    Was wirklich hilfreich wäre: wenn Du die aktuelle Audacity-Version anpassen würdest, indem Du...


    Große Teile dieser Logik sind in der 1.2-er Version bereits vorhanden und hätten gar nicht entfernt werden brauchen.

  • Zitat von stme


    Große Teile dieser Logik sind in der 1.2-er Version bereits vorhanden und hätten gar nicht entfernt werden brauchen.


    Is ja gut, aber jetzt, da das Kind schon in den Brunnen gefallen ist, braucht es jemanden, der es da wieder herausholt. Und wenn das nur daraus besteht, dass man einen Patch aus den 1.2er-Sourcen zusammenpfriemelt, der den alten Stand wiederherstellt. Ich könnte mir aber vorstellen, dass die Änderung absichtlich erfolgt ist. In diesem Fall würde ich eben dafür plädieren, ein Häkchen zu machen, dann fühlt sich der Programmierer, der es geändert hat, nicht auf den Schlips getreten. Oder man fragt einfach mal auf audacity-devel nach, warum das gemacht wurde und wer dafür verantwortlich ist. Aber machen muss man es. Es ist Open-Source-Software, jeder kann sich beteiligen.

  • Ich hab' keine Ahnung, was "audacity-devel" ist, und wen ich da kontaktieren soll. Ich dachte immer, daß dieses Forum hier, die deutsche Anlaufstelle für solche Eingaben sei.

  • Zitat von Markus


    Jetzt echt? Und wenn Du mehr als 99 oder weniger als 10 Tracks hast?


    Ich denke mal, die Frage sollte ehr sein, was mit mehr als 10 ist. 1. Wird das mit mehr als 99 weniger vorkommen (das würde ja dann heißen, das man 99 einzelne Segmente innerhalt des Projektes markiert hat und wo macht man das schon?) und 2. hatte ich das ja mit der if-Funktion ja als Denkanstoß mit reingebracht.


    Man kann, wenn sich einer, der C++ beherscht und sich da reinarbeiten kann, ja irgendwie festlegen, auf wieviel Stellen angegliechen werden soll (würde dann immer wieder eine If-Abfrage bedeuten). Leider kann ich den Gedanken nur für PHP umsetzen (das aber dem C++ abgeleitet wurde) und kann daher nur Ansatzweise die Hinweise geben.


    Zitat von Markus

    und das Ganze auch vorher ausgiebig testen.....


    Ich wollte gerade sagen, das ich das für Win98SE testen könnte, aber da fiehl mir ein, dass das Team vor wenigen Versionen von Audacity 2 getrennte Fassungen Frei gegeben haben. Also muß ich erst warten, bis das in der XP-version drin ist, getestet ist und dann in der 98er-Version drin ist und erst dann testen (man, das wird aber kompliziert :-)) )

  • Zitat von stme


    Ich hab' keine Ahnung, was "audacity-devel" ist, und wen ich da kontaktieren soll. Ich dachte immer, daß dieses Forum hier, die deutsche Anlaufstelle für solche Eingaben sei.


    Wie ich auch hier (http://www.audacity-forum.de/post/15894) schon geschrieben hatte, bin ich zwar (einer der) Audacity-Entwickler und lese dieses Forum (fast) jeden Tag, aber ich habe zur Zeit keine Zeit und Nerven, um irgendwelche Bugs zu reproduzieren oder zu beheben. Deshalb würde es sicher Sinn machen, die Sache mit der Sortierung noch mal auf audacity-devel anzusprechen, evtl. kümmert sich ein anderer Entwickler darum, oder der, der das Verhalten geändert hat, sagt was dazu, warum. Audacity-devel ist die sog. "Mailingliste", auf der sich die Entwickler und andere Leute, die etwas mit der Entwicklung von Audacity am Hut haben, austauschen. Da kannst Du Dich registrieren und eine Email schreiben. Diese Email wird dann von einer Menge von Leuten (ich tipp mal einige tausend oder mehr) gelesen, unter anderem auch von sämtlichen Audacity-Entwicklern. Infos gibt's hier:


    http://audacity.sourceforge.net/contact/lists


    Vorsicht: Die "Amtssprache" ist englisch :)

  • Keine besondes wichtige Nachricht. :)


    Damit stme sich die Zusammenhänge ungefähr vorstellen kann.


    Zitat

    Nachdem was da oben herum spekuliert wurde:


    und "%d" ist eine Dezimalzahl. Offenbar wird diese Dezimalzahl von wxWidgets für Windows ohne führende Nullen interpretiert. Warum das so ist muss aus der wxWidgets Dokumentation herausgelesen werden.


    hatte ich nicht den Eindruck, daß dieses Wissen in der Leserschaft hier vorhanden ist.


    Das ist richtig, ich bin Analog Elektroniker und kein Software Ingeneur. Ich habe weder von C++ noch von wxWidgets grössere Ahnung. Das soll nicht bedeuten, dass ich aus C++ nicht so "ungefähr herausraten" könnte, was er bedeuten soll, aber eine grosse Hilfe, um neuen Code zu schreiben bin ich leider nicht.


    Ich schreibe meine Beiträge hier aber auch oft extra so, damit das, was ich schreibe, im Zweifelsfall auch von 12- bis 14-jährigen verstanden werden kann.


    Wenn ich irgend etwas auf Audacity devel helfen kann, werde ich mein bestes versuchen, aber ich glaube nicht dass es (in meinem Fall) eine besonders grosse Hilfe ist wenn ich nur Herumgenörgele an die Entwickler Liste schicke, so lange ich keine definitiven Verbesserungsvorschläge (in funktionierendem C++ Code) auf Lager habe. Das war der Grund warum ich da bisher noch nichts unternommen hatte.


    Mit Nyquist (http://www.audacity-forum.de/thread/3377, Logatithmisches Blenden) sieht das anders aus, da ich auch auf den Nyquist und CCRMA Listen viel unterwegs bin und die beteiligten Entwickler meinen Namen kennen, da bekomme ich dann meist sehr schnell eine Antwort.

  • Windows Dateinamen sortieren...


    Zitat

    Es lässt sich das Verhalten einstellen, wie der Explorer die Dateien sortiert, wenn er bestimmte Nummernformate vorfindet.


    Erstmal Danke für die ausführliche Antwort.


    Die schlechte Nachricht ist aber: es handelt sich dabei um reine Oberflächenkosmetik, die (meiner Meinung nach) nichts mit der Dateinenamensortierung von Windows zu tun hat, sondern lediglich die Darstellung der Reihenfolge der Dateinamen in einem Explorer Fenster ändert.


    Was ich brauche ist eine Windows Funktion, mit der in Batchfiles die Dateinamen sowohl lexikalisch als auch numerisch sortieren kann, weil ältere Windows Versionen lexikalische Namen und neuere Windows Versionen numerische Dateinamen verwenden und so eine Funktion scheint (ausser vom C/C++ Level) überhaupt nicht vorhanden zu sein.


    Es geht mir dabei nicht darum, Windows schlecht zu machen (ich habe nichts "gegen" Windows), sondern ich habe hier z.B. Archivdateien, die über mehrere Jahre aufbewahrt werden müssen, und ich habe keine Lust jedesmal eigene Programme schreiben zu müssen weil ich keinen Weg finde Dateinamen mit Zahlen (Uhrzeit, Datum, Jahreszahlen) unter Windows richtig zu sortieren.


    Ich habe hier mittlerweile einen ganzen Stall voll selbst-kompilierter Unix Tools (weil z.B. Unix "mv" und "sort" kennen solche Probleme überhaupt nicht), aber das kann ja wohl irgenwie nicht die vom Hersteller des Betriebssystems gewünschte Lösung sein.


    Übertrieben einfaches Beispiel - ich habe zweimal die gleiche Dateiliste in zwei verschiedenen Schreibweisen:


    Code
    15_01_2009_Do_12Uhr00.mp3
    16_04_1998_Di_22Uhr30.mp3
    17_10_2002_Sa_00Uhr40.mp3
    
    
    15_1_2009_Do_12Uhr00.mp3
    16_4_1998_Di_22Uhr30.mp3
    17_10_2002_Sa_0Uhr40.mp3


    Format: Datum_Wochentag_Uhrzeit.mp3


    Wie kann ich die Dateien in einem Windows Batchfile in beiden Formaten nach Datum und Uhrzeit (mit und ohne führende Nullen) in chronologisch richtiger Reihenfolge sortieren? Die Dateien anschliessend umzubenennen, ist mehr oder weniger eine Lachnummer. Das Problem ist aber, erst einmal die richtige Reihenfolge zu finden.


    Weiss irgend jemand eine Windows-eigene Lösung dafür, die in einem Standard Windows Batchfile verwendbar ist?


    P.S.: ich gebe zu, das Thema hat definitiv nichts mehr mit Audacity zu tun. Ich erwarte auch kein konkretes Programm oder ähnlich (das kann ich selber schreiben), aber stme hat sich da scheinbar schon öfter Gedanken drüber gemacht, vielleicht gibt es ja eine Lösung, die ich einfach nur noch nicht kenne?


    Zitat

    Die Formate selbst ändert er natürlich nicht.


    Das ist mir natürlich schon klar... :)

  • Hallo Edgar,
    Du hast Recht, jetzt wird's komplett Off-Topic und hat weder mit Windows, noch mit Linux, noch mit Audacity was zu tun.


    Vorweg noch: Ich verstehe unter "Dateinenamensortierung" und "Darstellung der Reihenfolge der Dateinamen" NICHT unterschiedliche Dinge.


    Aber in Deinem Problem geht es ja, wenn ich Dich recht verstanden habe, anscheinend "nur" darum, eine Liste von Namen, die keiner vollständig einheitlichen Syntax folgen, zu vereinheitlichen. Kurz gesagt, dur brauchst Nullen, wo keine sind.


    Mein erster Ansatz wäre, das bereits schonmal erwähnte LupasRename, vorausgesetzt, bei den Objekten handelt es sich um Dateien. Darunter gibt es wieder verschiedene Möglichkeiten:
    1.
    Bei lexikalischer Sortierweise im Lupa-Hauptfenster würden sich die einander ähnlichen Bezeichner in der Dateiliste zu Blöcken zusammen finden und man könnte dann zu einem Block sagen: "Füge an der Stelle 4 eine 0 ein" usw.


    Oder 2.:
    Man würde das Erstellungsdatum im Dateisystem zur Grundlage machen und alle Dateien komplett neu und nach einheitlichem Muster benennen. Meine Lieblingsvariante wäre dabei YYYYMMDD_HHMMSS, weil so die lexikalische Reihenfolge mit der Chronologischen und der Nummerischen identisch ist. LupasRename bietet hierfür entsprechende Regeln und Platzhalter an und kann nach Definition eines einfachen Musters, eine große Menge von Dateien auf einen Klick umbenennen. Wenn Deine Dateien alle diesem Muster entsprechen würden, wäre in jedem Fall die Sortierreihenfolge identisch, egal, welches OS Du verwendest.


    Oder 3.:
    Lupa ist sogar in der Lage, MP3- und EXIF-Tags auszuwerten und aus den Informationen Dateinamen zusammen zu setzen oder sie darin einzufügen.


    Bei allen Varianten dieses Ansatzes wäre keine einzige Zeile Batch-Code notwendig.


    Ein komplett anderer Ansatz, den ich ebenfalls schon des öfteren verfolgt habe, wäre, die Dateiliste als Text in Excel zu importieren und dabei die Unterstriche und das Wort "Uhr" als Trennzeichen zu werten, so daß Monate, Tage, Jahre usw. in separate Spalten wandern. Dann kann man in einer Hilfsspalte die einzelnen Teile im korrekt-einheitlichen Format und der gewünschten Reihenfolge von Excel mit den entsprechnenden Formatier-Funktionen wieder zu einem String zusammen setzen. Davor setzt man dann noch "ren " und den Original-Namen und hat damit den Code für eine Batch-Datei zum Umbenennen.


    Ah, dann fällt mir gerade noch der dir-Befehl ein - dritter Ansatz:
    dir /od
    sortiert nach Erstellungsdatum in aufsteigender Reihenfolge
    dir /o-d
    absteigende Reihenfolge.
    Sicher gäbe es eine Möglichkeit, das Dateidatum innerhalb von Batch-Befehlen auszulesen und daraus widerum einen ren-Befehl zu füttern. Aber das wäre das selbe, was ich mit ein paar Klicks mit LupasRename, wie oben beschrieben, viel schneller kann.


    Ich höre jetzt auf zu Denken, sonst fällt mir noch mehr ein. Die Beste Lösung ist allerdings immer noch die, wo das Ursprungsprogramm von vornherein das macht, was man möchte, so daß zeitraubende Zusatzschritte wie die geschilderten entfallen können. Deswegen lautet eben mein Wunsch, daß Audacity die Nummerierung wieder so handhaben soll, wie früher in Version 1.2.x.
    Grüße - Stefan