Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Wolle-77 •--->


Anmeldedatum: 25.02.2003 Beiträge: 449 Wohnort: Geldern
|
Verfasst am: 26.11.2005 - 17:57 Titel: Telefonnummer automatisiert spationieren |
|
|
Hallo zusammen,
für ein HTML-Projekt, in dem ich aus einer Datenbank mir alle Sätze einlese und daraus eine schicke Tabelle generiere, habe ich jetzt noch ein Bonbon entwickelt. Alle Telefonnummern, die einfach xxx-xxx erfaßt wurden, werden nun korrekt formatiert und spationiert.
Man könnte das Script auch für den Vorstufenbereich anpassen, sodaß anstatt eines Leerzeichens beispielsweise der Xtag </q> für ein Viertelgeviert (XPress) geschrieben wird.
Der (Nach-)Versuch, ein korrektes HTML-Viertelgeviert zu erzeugen, schlug erstens fehl bzw. man könnte ihn über einen Umweg auch erzeugen, ich finde aber ein Leerzeichen ausreichend und ok.
Die erste if-Abfrage ist nur enthalten, damit eine nicht erfaßte Nummer (–) ein Gedankenstrich bleibt.
Code: |
on telnumspatiohtml(nummer) -- © Copyright 26.11.2005 by Martin Wolter, wolle@dpsggeldern.de
if length of nummer is 1 then
return nummer
else
set nummer to do shell script "echo '" & nummer & "' | rev | sed 's/ *//g'"
set old_delim to my text item delimiters
set my text item delimiters to "-"
set nummer to every text item of nummer as list
set vorwahl to items 2 thru -1 of nummer
set nummer to item 1 of nummer
set my text item delimiters to ""
set vorwahl to do shell script "echo '" & vorwahl & "' | sed 's/../& /g' | sed 's/^ *//g' | sed 's/ *$//g'"
set nummer to do shell script "echo '" & nummer & "' | sed 's/../& /g' | sed 's/^ *//g' | sed 's/ *$//g'"
set nummer to do shell script "echo '" & ((nummer & " " & ")" & vorwahl & "(") as string) & "' | rev"
set my text item delimiters to old_delim
return nummer
end if
end telnumspatiohtml
|
_________________ Martin Wolter
--
Apple rocks the planet! |
|
Nach oben |
|
 |
Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 21.04.2006 - 00:35 Titel: |
|
|
Da Du ohnehin do shell script nutzt, was hältst Du von dieser Lösung?
Code: | on telnumspatiohtml(nummer) -- (C)opyleft to you by Skeeve
if length of nummer is 1 then
return nummer
else
set nummer to do shell script "perl -e '$_=q<" & nummer & ">;s/\\s//g;1 while s/(.*\\d)(\\d\\d)/$1 $2/;s/([^\\d ])/ $1 /g;s/ - /) /;print q<(>,$_'"
return nummer
end if
end telnumspatiohtmll |
Mich stört es halt immer wieder, wenn ich sehe, daß tausende von shell Kommandos aufgerufen werden (echo, rev und x-mal sed), wo es auch ein perl Aufruf täte.
Mein Algorithmus liefert nicht die gleichen Ergebnisse wie Deiner, kann aber z.B. mit mehreren "-" umgehen (Bsp: 01234-5678-99 => (0 12 34) 56 78 - 99) |
|
Nach oben |
|
 |
Wolle-77 •--->


Anmeldedatum: 25.02.2003 Beiträge: 449 Wohnort: Geldern
|
Verfasst am: 21.04.2006 - 00:53 Titel: |
|
|
Hallo skeeve,
Also zunächst mal, von perl habe ich so gut wie keine Ahnung; daher kann ich mir gut vorstellen, daß man so einige Dinge damit anstellen kann, die auf anderem Wege eben ein wenig mehr Umweg erfordern. Beispielsweise hat mir mal jemand gezeigt, wie man aus einer Textdatei jede dritte Zeile herausholt, das geht mit anderen Mitteln auch gar nicht...
Ich finde jetzt meinen Handler aber alles andere als unoptimiert oder kompliziert -- "tausend" Aufrufe sind es ja nun nicht gerade; und ich mache dadurch wahrscheinlich ähnliche Schritte, nämlich das Umdrehen der Nummer und Aufteilen. Ich finde nicht, daß das Gefrickel ist. Zudem muß es zweimal gemacht werden für Vorwahl und Nummer, daher auch zwei do shell script-Aufrufe.
Ich habe mal einen Geschwindigkeitstest vorgenommen; bei 1000 (eintausend) Durchläufen braucht Dein Handler 13 Sekunden; meiner bei derselben Anzahl 81 Sekunden, also 68 Sekunden mehr Zeit; ist schon nicht ohne.
Allerdings tut er ja auch ein wenig mehr AppleScript-internes...
Naja, wenn Du weißt, wo man sich ein wenig mehr in perl einarbeiten kann bzw. wo es einen guten Anfängerkurs gibt, dann immer her damit. _________________ Martin Wolter
--
Apple rocks the planet! |
|
Nach oben |
|
 |
Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 21.04.2006 - 01:38 Titel: |
|
|
Wolle-77 hat Folgendes geschrieben: | Zudem muß es zweimal gemacht werden für Vorwahl und Nummer, daher auch zwei do shell script-Aufrufe. |
Nö. Mache ich bei per in einem Rutsch.
Hier mal aufgelistet, was geschieht:
Code: |
# In perl kann jedes Zeichen als Hochkomma dienen
# Hier ist es <>. Das spart \
# Hier weise ich einer Standardvariablen $_ die Nummer zu
$_=q<hier steht dann die Nummer>;
# Dann lösche ich alle Spaces (und tabs)
s/\s//g;
# Nun werden alle 3er-gruppen von Ziffern (\d) gesucht
# Und ein Space hinter die erste gesetzt
# Das ganze so lange, bis keine mehr da sind
1 while s/(.*\d)(\d\d)/$1 $2/;
# Dann wird vor und hinter jedes Zeicehn, das keine Ziffer
# und kein space ist, ein space gesetzt
s/([^\d ])/ $1 /g;
# Anschließend wird das erste Minus (das nun ja space - space ist
# durch eine geschlossene Klammer gefolgt von space ersetzt
s/ - /) /;
# Und nun wird asugegeben
print q<(>,$_'
|
Wolle-77 hat Folgendes geschrieben: | Naja, wenn Du weißt, wo man sich ein wenig mehr in perl einarbeiten kann bzw. wo es einen guten Anfängerkurs gibt, dann immer her damit. |
Leider nicht. Learning by doing war es bei mir und lesen im "Kamelbuch" und das seit mehr als 10 Jahren.
www.perlmonks.org ist eine gute englische Perl User Seite (da bin ich auch Skeeve) und ansonsten solltest Du auf deinem OS X mit perldoc alles haben, was an wichtiger Doku da ist.
Oder frag mich.  |
|
Nach oben |
|
 |
sdenjuopl148 •---->

Anmeldedatum: 17.12.2022 Beiträge: 725 Wohnort: New York city
|
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2002 phpBB Group Deutsche Übersetzung von phpBB.de
|
|
|