Salut Leute.
Kennt jemand eine Möglichkeit ein String in einzelne Buchstaben zu zerlegen oder besser noch Leerzeichen hinzuzufügen?
Bsp.
Hallo -> H a l l o
danke euch.
Anmeldungsdatum: Beiträge: Zähle... |
Salut Leute. Kennt jemand eine Möglichkeit ein String in einzelne Buchstaben zu zerlegen oder besser noch Leerzeichen hinzuzufügen? Bsp. Hallo -> H a l l o danke euch. |
||||
Anmeldungsdatum: Beiträge: 486 Wohnort: Im kühlen Norden |
echo Hallo | sed 's/./& /g;s/ $//' |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 164 |
Hut ab. 👍 Danke vielmals. |
||||
Anmeldungsdatum: Beiträge: 486 Wohnort: Im kühlen Norden |
Hier ist noch einer: echo Hallo|awk -F, '{n=split($1,a,""); for (i=1;i<=n;i++) {printf("%s ",a[i])}}' |
||||
Wikiteam
Anmeldungsdatum: Beiträge: 11314 Wohnort: Bremen |
Hi! Brauche es für mein Baustelle/xsane2speech-Skript noch etwas genauer. Der Sprachsynthesizer Festival steigt bei deutschen Stimmen bei bestimmten Zeichenkombinationen aus; es sind Strings, in denen zwei Buchstaben direkt mit einer Ziffer kombiniert sind; also z.B, TZ5 oder kf7, die ich in TZ 5 oder kf 7 zerlegen müsste. Es sollte sowohl Groß- als auch Kleinbuchstaben-Zahlkombinationen so zerlegen können. Außerdem auch noch etwas, das so etwas wie ÖkoCheck in Öko Check (oder Ökocheck) umwandeln kann, weil ansonsten so ein Wort buchstabiert wird, was natürlich für eine Sprachausgabe nicht so prickelnd ist... sed sollte sowas können. oder? Leider verstehe ich zuwenig davon... so long |
||||
Anmeldungsdatum: Beiträge: 7735 |
So?
Oder so? (Weniger Leerzeichenmüll)
|
||||
Wikiteam
Anmeldungsdatum: Beiträge: 11314 Wohnort: Bremen |
Hi! Cool, 😎 und so fix das ganze! 👍 den zweiten Vorschlag um ([a-zA-Z]+) erweitert führt dazu, dass nur mindestens doppelte Zeichen-Zahl-Kombination ersetzt wird. sed -r -e 's/([a-zA-Z]+)([a-zA-Z]+)([-0-9]+)/\1 \2/g' -e 's/([a-z]+)([A-Z][a-z]+)/\1 \2/g' Wie bekomme ich es jetzt noch hin, dass KreditKartenLeserFehler am besten gleich in Kredit-Karten-Lese-Fehler umgebaut wird? So wird nur das erste Vorkommen kleinGroß gefunden aber nicht kleinGroßGroß, und die Bindestriche wären standardsprachlich besser... Noch besser eigentlich Kreditkartenlesefehler... so long |
||||
Anmeldungsdatum: Beiträge: 7735 |
Vielleicht besser so: $ echo KreditKartenLeserFehler | sed -r -e 's/([[:lower:]])([[:upper:]])/\1-\2/g' Kredit-Karten-Leser-Fehler Oder so: $ echo KreditKartenLeserFehler | sed -r -e 's/([[:lower:]])([[:upper:]])/\1\l\2/g' Kreditkartenleserfehler |
||||
Wikiteam
Anmeldungsdatum: Beiträge: 11314 Wohnort: Bremen |
Hi! Schon sehr gut, allerdings wird jetzt ein vorhandener String Kauf-Rausch in Kauf -Rausch zerlegt.. Geht das vieleicht auch, die Großbuchstaben im Wort in kleine umzuwandeln? 😇 so long |
||||
Wikiteam
Anmeldungsdatum: Beiträge: 11314 Wohnort: Bremen |
Hi! Die Zweite Version geht 👍 . Kann man aber bei dem Zerlegen von BuchstabeBuchstabeZahl verhindern dass Karten-Leser in Karten -Leser zerlegt wird? Eigentlich solle das dort doch bei Ziffern eine Leerstelle geben? 😲 so long EDIT Mein Fehler, da war ein Bindestrich vor die Null geraten...sorry |
||||
Anmeldungsdatum: Beiträge: 7735 |
Kommt davon, wenn man -123 matchen will und die faule Variante wählt. Ersetz den Zahlmatch durch (-?[0-9]+). Dann bleibt Kauf-Rausch Kauf-Rausch ohne Leerzeichen. Oder noch besser lass das -? ganz weg und mach nur ([0-9]+), das Vorzeichen macht da wohl eh keinen Sinn. ☺ |
||||
Wikiteam
Anmeldungsdatum: Beiträge: 11314 Wohnort: Bremen |
Hi! Danke, so hatte ich es jetzt versucht, und es ging - Minuszahlen kommen hoffentlich in solch einem Zusammenhang nicht vor... Kann der Synthesizer zumindest wohl nicht lesen, müsste ich aber mal ausprobieren.. Allerdings funktioniert jetzt mein recode-Befehl nicht mehr, sehr seltsam das... Scheint aber daran zu liegen, dass ich versuche, schon mal codierte Dateien nochmal aufzurufen 😬 so long |
||||
Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Hi hank, hi frostschutz, gibt es eigentlich irgend einen Grund, warum Ihr beim matchen der ...x1..- Kombination das "+" verwendet ? Eigentlich kann es doch egal sein, was vor dem Buchstaben und nach der Zahl kommt, und da könnte man doch besser auf genau 1 Buchstaben und 1 Zahl matchen: sed -r -e 's/([[:alpha:]])(-?[0-9])/\1 \2/g' ... nach dem Motto "keep it simple". Und diese Version funktioniert sogar bei Umlauten. Der Filter für die Großbuchstaben im Wort von frostschutz oben ist sowieso schon perfekt, also wäre es zusammen: sed -r -e 's/([[:alpha:]])(-?[0-9])/\1 \2/g; s/([[:lower:]])([[:upper:]])/\1\l\2/g' LG, track |
||||
Wikiteam
Anmeldungsdatum: Beiträge: 11314 Wohnort: Bremen |
Hi!
Mich darst du das nicht fargen, ich hab' nur seeeehr begrenzt Ahnung davon 😉
Hintergrund ist, dass der SprachSynthesizer bei einem Buchstaben in Kombination mit einer Zahl keine Probleme hat, es sind nur (und auch längst nicht bei allen allen) Kombinationen von zwei Buchstaben mit einer direkt nachfolgenden Zahl, die Probeme machen, daher wollte ich auch nur solche raushaben. Das "Minus"-Zeichen brauche ich dafür eigentlich nicht, direkt angebundenen "-" werden sowieso nicht ausgesprochen...
Umlaute hab' ich in diesem Zusammenhang noch gar nicht getestet, mach ich gleich nochmal... Ich versuchs mal mit sed -r -e 's/([[:alpha:]])([[:alpha:]])([0-9])/\1 \2/g; s/([[:lower:]])([[:upper:]])/\1\l\2/g' wobei die "Einsparung" dann auch nicht allzugroß ist 😉 Trotzdem Danke - so long |
||||
Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Na ja, "Einsparung" ist hier egal ... Mein Ansatz war, soweit wie möglich "false positives" zu verhindern. Und je einfacher der Filter, desto weniger Fehler. So ungefähr ... Bei den Zahlen ist ein Leerzeichen zu viel (vor der Zahl) eigentlich egal, deshalb bin ich da nicht drauf eingestiegen. Aber die Fein-Anpassung kriegst Du doch sowieso hin, trotz angeblich "keine Ahnung" .. 😉 LG, track |