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

Frage für Skeeve

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


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 05.09.2006 - 11:22    Titel: Frage für Skeeve Antworten mit Zitat

Hallo (Skeeve),

schon des Öfteren hast Du hier ja gezeigt, wie mächtig Perl mit Texten umgehen kann.

Ich frage mich, ob es Dir möglich ist, diesen Buchstabensalat in schneller Perl-Methode nachzubilden.


Beispielsatz: "Es ist eagl, in wceelhr Rfgonlheeie Bhuaestcbn setehn; nur der etrse und ltetze muß riitchg setehn , man knan die Ttexe eathciselnurr Wisee tztderom ncoh lseen."


Das habe ich vor ein paar Jahren in meine TextMachine eingebaut (mit herkömmlichen AppleScript-Methoden) und auch Snow hat das hier mal als Snippet gepostet.


Also, Grundprinzip ist: Trenner sind blanks; Satzzeichen !",. usw. dürfen nicht mitgemischt werden, dann bleibt erster und letzter Buchstabe eines Wortes stehen und der Rest wird in zufälliger Reihenfolge wieder eingefügt, wobei jeder vorherige Buchstabe auch nur einmal wieder benutzt werden darf.


Ist sowas möglich und wie kurz?
_________________
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: 05.09.2006 - 12:23    Titel: Re: Frage für Skeeve Antworten mit Zitat

Klar ist das möglich. Auch sehr kurz. Folgende Fragen dazu:

  1. Wo kommt der Text her? Darf ich eine Datei voraussetzen die per Eingabeumleitung gelesen wird, oder muß das Perl Programm die selbst öffnen?
  2. Müssen Fehler abgefangen werden oder ist das egal und okay, wenn das Programm einfach merkwürdig reagiert, sollte die Datei z.B. fehlen.
  3. Länger und verständlich oder
  4. kurz und kryptisch
  5. oder gar beides?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 05.09.2006 - 13:17    Titel: kurz & kryptisch Antworten mit Zitat

Code:
perl -pe 'sub c{for($i=@_;--$i;($_[$i],$_[$j])=($_[$j],$_[$i])){$j=rand$i}join"",@_}s:(?<=\b\w)(\w+)(?=\w\b):c split//,$1:eg' < text
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 05.09.2006 - 14:10    Titel: Antworten mit Zitat

Hi Skeeve,

Danke für die Antwort(en).

Das Script sollte ruhig der Performance zulastig nicht zu kryptisch werden (oder einfach eine zweite Variante) und es wäre schön, wenn eine gepipte Standardausgabe genommen würde.

Also per echo in perl gepiped oder so?
_________________
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: 05.09.2006 - 14:21    Titel: Antworten mit Zitat

Code:
#/usr/bin/perl -p

sub scramble {
   for ( my $i= @_; --$i; ) {
      my $j= rand $i;
      ($_[$i],$_[$j])= ($_[$j],$_[$i]);
   }
   join "", @_;
}

s:(?<=\b\w)(\w+)(?=\w\b):scramble split //, $1:eg;


Aufruf ist natürlich auch als pipe möglich.
Code:
echo "testtext zum verscramblen" | scramble > verscrambled

oder
Code:
cat file | scramble > verscrambled

oder
Code:
scramble < file > verscrambled
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 05.09.2006 - 20:50    Titel: Antworten mit Zitat

Hallo Skeeve,

ich meinte mit weniger kryptisch aber kein reines ShellScript.

So etwas wäre ideal zur Verwendung innerhalb von AppleScript:

Code:

set meintext to "Dies ist ein Beispielsatz"
do shell script "perl -pe 'sub c{for($i=@_;--$i;($_[$i],$_[$j])=($_[$j],$_[$i])){$j=rand$i}join\"\",@_}s:(?<=\\b\\w)(\\w+)(?=\\w\\b):c split//,$1:eg' < " & meintext

Das läuft zwar, aber perl erwartet hier sicherlich eine Datei, oder? Jetzt könnte man diese ja temporär zwischenspeichern, aber geht das nicht auch als intern übergebene Variable?

Ich sehe schon, damit das innerhalb von do shell script läuft, muß man das immer auf einen Einzeiler und damit nicht leicht zu lesen reduzieren..., oder?
_________________
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: 06.09.2006 - 08:58    Titel: Antworten mit Zitat

Wolle-77 hat Folgendes geschrieben:
Hallo Skeeve,

ich meinte mit weniger kryptisch aber kein reines ShellScript.

Na dann sag das doch gleich! Da Du gezielt nach Perl gefragt hast, habe ich das natürlich auch entsprechend umgesetzt. Du möchtest also einen Filter für AppleScript.

Na gut... Da werde ich dann auch mal was abliefern - später. Jetzt muß ich erstmal "anschaffen gehen" Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 06.09.2006 - 10:43    Titel: Antworten mit Zitat

Kurze Pause (warten auf Ende eines "Compilerlaufs) und hier haben wir es:

Code:
property scramble : "cat <<'" & (ASCII character 7) & "' | perl
    sub scramble {
        for ( my $i= @_; --$i; ) {
            my $j= rand $i;
            ($_[$i],$_[$j])= ($_[$j],$_[$i]);
        }
         join q//, @_;
    }

    while (<DATA>) {
        s:(?<=\\b\\w)(\\w+)(?=\\w\\b):scramble split //, $1:eg;
      print;
    }
__DATA__
"

set theText to "Alle meine Entchen
schwimmen auf dem See, schwimmen auf dem See,
Koepfchen in das Wasser, Schwaenzchen in die Hoeh'.

Alle meine Gaenschen
watscheln durch den Grund, watscheln durch den Grund,
Suchen in dem Tuempel, werden kugelrund.

Alle meine Huehner
scharren in dem Stroh, scharren in dem Stroh,
Finden sie ein Koernchen, sind sie alle froh.

Alle meine Taeubchen
gurren auf dem Dach, gurren auf dem Dach,
Fliegt eins in die Luefte, fliegen alle nach."

do shell script scramble & theText


Beachte:

  • Es gibt ein Limit für die Größe bei do shell script
  • Im Text darf der ASCI Character 3 nicht auftauchen, da ich den als Ende Zeichen verwendet habe (in ASCII als end of text definiert). Es ist allerdings nicht nötig, den Character auch wirklich ans Ende zu setzen. Also nicht wundern, daß er nicht auftaucht.
  • Ausführungstechnisch (Performanz) könnte es besser sein, wirklich Dateien zu verwenden oder gegebenenfalls sogar named pipes (FIFOs) und den scrambler im Hintergrund laufen zu lassen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 06.09.2006 - 12:15    Titel: Antworten mit Zitat

Hallo Skeeve,

vielen Dank für Deinen Einsatz. Also das verstehe ich auf Anhieb erstmal nicht; ist eine Stufe zu hoch.

Ich werde es mir mal anschauen und experementieren. Vielen Dank dafür.
_________________
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: 06.09.2006 - 13:42    Titel: Antworten mit Zitat

Wolle-77 hat Folgendes geschrieben:
Hallo Skeeve,

vielen Dank für Deinen Einsatz. Also das verstehe ich auf Anhieb erstmal nicht; ist eine Stufe zu hoch.

Schau mal in den ersten Thread in diesem Unterforum. Ich habe dazu was geschrieben.
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 -> AppleScript X 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