Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Telefonnummer automatisiert spationieren

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> OS X-Snippets
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 26.11.2005 - 17:57    Titel: Telefonnummer automatisiert spationieren Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 21.04.2006 - 00:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 21.04.2006 - 00:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 21.04.2006 - 01:38    Titel: Antworten mit Zitat

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. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> OS X-Snippets Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
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


AppleScript für absolute Starter