Ctrl-M und zu viele Bindestriche

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
Sam van Ratt
Junior Member
Junior Member
Posts: 4
Joined: 2006-01-29, 13:14 UTC
Location: München

Ctrl-M und zu viele Bindestriche

Post by *Sam van Ratt »

Hallo Forum, 2ter Versuch:
Ich möchte jeden vierten/fünften/... Bindestrich in einer Datei ersetzen.
ich sitze nun vor der Aufgabe etwa 5k Dateien umzubenennen.
Ich muß die Struktur: A-B-C-D einhalten damit ich NAmenskonventionen erfülle. Derzeit sieht's noch in etwa so aus
A-B-B-C-D-D-D
Im Fallbeispiel:
AV416-Flash4k_29C4009-039-gtr-452U13-34p9_W12-AV416.bin
"AV416-Flash4k_29C4009-039-" ist soweit OK
jedes weitere muß ich durch einen Unterstrich ersetzen
So soll es aussehen:
A-B_B-C-D_D_D...
im Beispiel:
AV416-Flash4k_29C4009-039-gtr_452U13_34p9_W12_AV416.bin
Mein erster Ansatz war *-*-*-*-* durch *-*-*-*_* ersetzen zu lassen, was nicht klappt (dazu muß ich wohl mit den $ Variablen arbeiten).
Gruß
Sam

P.S.: Flashstandsbezeichnungen sind Versionsnummern/-bezeichnungen von FlashROMs für Steuergeräte.
Last edited by Sam van Ratt on 2006-01-29, 15:09 UTC, edited 2 times in total.
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Dein Posting klingt danach, als wenn Du eine triviale Aufgabe möglichst kompliziert erklären möchtest, damit sie schlußendlich niemand mehr lösen kann. ;)
Probier's mal mit weniger, dafür aber präziseren Sätzen und mit Beispielen anhand von realen Datei- und Verzeichnisnamen statt kryptischen Abstrahierungen. Laß die Infos, die nicht interessant sind, einfach weg, z.B. den Teil der Aufgabe, den Du meinst, selbst lösen zu können.

Was bitte ist eine "Flashstandsbezeichnung"? Habe ich noch nie gehört sowas.

Wenn Du einfach nur den jeweils fünften Bindestrich eiens Dateinamens durch einen Unterstrich ersetzen willst, sag einfach "ja", dann bekommst Du einen RegEx-String und gut is. ;)

Icfu
This account is for sale
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Im Fallbeispiel:
AV416-Flash4k_29C4009-039-gtr-452U13-34p9_W12-AV416.bin
Das ist aber nun wieder was anderes, weil da hinten bereits ein Unterstrich steht! Das ist also nicht A-B_B-C-D-D-D-D sondern A-B_B-C-D-D_D-D. Das ist äußerst verwirrend, RegEx verlangt Klarheit, kein Wischiwaschi, sonst kommen unerwartete Resultate raus!

Also, ich hab's jetzt mal so gemacht, wie ich Dich zuerst verstanden habe:
A-B_B-C-D-D-D-D nach A-B_B-C-D_D_D_D

Code: Select all

Suchen nach: -(\w+)-(\w+)-(\w+)-(\w+)(\.\w+)
Ersetzen durch: _$1_$2_$3_$4$5
Wenn Du Dein Posting nur editierst, bekomme ich keine Emailbenachrichtigung, deshalb bitte "normal" antworten, wenn Du noch was nachschieben willst.

Icfu
This account is for sale
Sam van Ratt
Junior Member
Junior Member
Posts: 4
Joined: 2006-01-29, 13:14 UTC
Location: München

Post by *Sam van Ratt »

Hallo icfu,
einen Unterstrich habe ich auch als normales Satzzeichen gewertet. Mit RegEx kenne ich mich auch nicht aus, daher auchdiese neue Erkenntnis das ein bereits vorhander Unterstrich ein Makel hier darstellt. Mien Grundproblem besteht eben in dem nicht vorhanden Syntax des D Bauteils. Ist es eine Hilfe wenn ich sage, daß ich von hinten (Dateinamensende) her gesehen, 'einfach' den letzten Bindestrich durch einen Unterstrich zu ersetzen (inkl bereits vorhandener Unterstriche) [mit der Premisse das alle dortigen Dateien eben im D-Teil minimum einen - zuviel haben (kann ja die mehrfachen -, mehrfach angehen]?
Der von dir genannte Syntax sollte mir helfen zumindest da mal in die Sprünge zu kommen
Gruß und Danke
Sam
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Ist es eine Hilfe wenn ich sage, daß ich von hinten (Dateinamensende) her gesehen, 'einfach' den letzten Bindestrich durch einen Unterstrich zu ersetzen (inkl bereits vorhandener Unterstriche) [mit der Premisse das alle dortigen Dateien eben im D-Teil minimum einen - zuviel haben (kann ja die mehrfachen -, mehrfach angehen]?
Hier muß ich passen, weil ich nur 50% verstehe.

Wenn Du sagst, daß das Bindungsglied Nummer sechs entweder ein Bindestrich oder ein Unterstrich ist, kann man das berücksichtigen.

Probier's mal so:

Code: Select all

Suchen: [-_](\w+)[-_](\w+)[-_](\w+)[-_](\w+)(\.\w+)
Ersetzen: _$1_$2_$3_$4$5
Wenn das nicht funktioniert, gib mir bitte mehr Dateinamen – je unterschiedlicher, je besser – vielleicht hilft das.

Icfu
This account is for sale
Sam van Ratt
Junior Member
Junior Member
Posts: 4
Joined: 2006-01-29, 13:14 UTC
Location: München

Post by *Sam van Ratt »

Habe gerade eine wichtige Beschränkung gesehen: Leerzeichen, Kommas, Pluszeichen, Hochkommas; kommt alles in den Ausdrücken vor.

AV416-Flash4k_29C4009-039-gtr-452U13-34p9_W12-AV416.bin
AV416-Flash16k_49E16004.D3_Anpassung Messfahrt S'03E-039-gtr-452U13-34p9_W12-AV416.bin
TestROM-R4Sauger+Turbo-002-12.04.2004-R4_C6.bin
...
Danke für deine Mühe

Gruß
Sam
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Wenn da alles vorkommt, solltest Du eine Vorauswahl treffen und dann mehrere RegEx-Strings anwenden.

Es ist mühselig, alle Ausnahmefälle in einen einzigen String einzubauen und ehrlich gesagt, habe ich dazu mangels Bezahlung keine Böcke, das dauert mir einfach zu lange, sorry. ;)

Schau Dir reguläre Ausdrücke mal selbst an, üben kannst Du mit The Regex Coach.

Viel Erfolg

Icfu
This account is for sale
Post Reply