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

Perl anyone?

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> Scripter-Treff
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  

Soll ich weiter machen?
Ja
50%
 50%  [ 2 ]
Nein
25%
 25%  [ 1 ]
Egal
25%
 25%  [ 1 ]
Stimmen insgesamt : 4

Autor Nachricht
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 12.05.2006 - 21:07    Titel: Perl anyone? Antworten mit Zitat

Ich habe hier ja schon des öfteren Perl erwähnt. Das kommt daher, daß ich die Sprache nun schon seit mehr als 10 Jahren nutze, angfangen unter DOS fürs FIDO Netz (Nachrichten in Crosspoint einsortieren) bis heute, wo ich es regelmäßig für adhoc Lösungen auf der Arbeit oder auch zum Vergnügen Wink verwende.

Nun dachte ich mir, ich fang mal an, den einen oder anderen hier dafür zu begeistern.

Darum zunächst mal die wichtigsten Unterschiede zwischen AppleScript und Perl, wie ich sie sehe.

AppleScript ist ja eine sehr geschwätzige Sprache. Perl hingegen ist im Allgemeinen sehr kurz und knapp.

Applescript eignet sich wunderbar um andere Programme zu steuern. Perl arbeitet am Besten mit Dateien.

AppleScript hat nur rudimentäre Textverarbeitungsfunktionen. Perl nutzt reguläre Ausdrücke um Texte zu verarbeiten.

AppleScript kommt mit einem AppleScript Editor. Für Perl nimmt man irgendeinen Text Editor, da nichts Editormäßiges mitgeliefert wird.

AppleScript läuf auf Mac OS (X). Perl läuft auf jedem *IX, und sogar auf WinDOS.

Wer mit Perl anfangen will, sollte zumindet ein bischen was über das Terminal wissen. Es gibt nämlich von Haus aus nichts doppelklickbares.

Wollen wir einfach mal mit dem altbekannten "Hallo Welt" anfangen?

Erstellt Euch einen Ordner "myperl".

Erstellt Euch dann eine Textdatei (in TextEdit Shift-Apfel-T) mit dem Inhalt:
Code:
#!/usr/bin/perl

print "Hallo Welt\n";

und speichert das als "HalloWelt" im Ordner "myperl" ab.

Jetzt öffnet Ihr ein Terminal Fenster und gebt folgendes ein:
Code:
cd ~/myperl

Damit wechselt ihr in den Ordner "myperl"

Code:
chmod +x HalloWelt

Damit macht Ihr "HalloWelt" ausführbar, d.h. Ihr teilt Mac OS X mit, daß das die Datei ein Programm ist.

Code:
./HalloWelt

Damit startet Ihr "HalloWelt" und solltet als Ausgabe "Hallo Welt" erhalten (ohne die Anführungszeichen.

So weit, so gut?

Soll ich weiter machen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 14.05.2006 - 23:55    Titel: Antworten mit Zitat

Hallo Skeeve,

ich fände es sehr gut, wenn Du hier eine Art Perl-Workshop erfassen und nach und nach erweitern würdest. Ich weiß übrigens nicht, wie ich abstimmen kann, daher antworte ich schriftlich direkt...

Was ich aber besser fände, wäre, wenn Du Dich aus der Sicht AppleScripts dem Thema, der Perle, widmen würdest -- so wie bereits geschehen mit Deinen Antworten zum Abkürzen der ohnehin schon schwer zu verstehenden Shell-Tricks.

Also wie jemand sich ein externes Perl-Script ausführbar erstellt, ist glaube ich nicht so gefragt. Viel mehr ist die Integration in AppleScript gefragt, also in ein do shell script-Kommando verpackt.

Und dann eben die eleganten Möglichkeiten erklärt, was alles möglich ist. So würden universelle Module entstehen.

Hier einmal etwas, was mich interessieren würde: Du hast einen Ordner mit Dateien, JPGs. Es gilt, eine HTML-Fotogallerie (inklusive Links zum nächsten Bild usw.) zu erstellen. Mit AppleScript möglich, aber eben eine Schleife.

Wie baut man mit perl -- möglichst Einzeiler, damit innerhalb eines AppleScript-Droplets, eine Schleife, damit perl pro Datei (Dateiname...) nun eine HTML-Datei in Unicode codiert (!) speichert; es gibt ja dann jeweils einen kleineren HTML-Teil, der gleich ist und eben wird dynmaisch die jeweilige Datei eingebaut.

Es muß nichts Fertiges oder Perfektes werden, nur ganz einfach die Herangehensweise, schrittweise erklärt, wäre interessant.
_________________
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: 15.05.2006 - 14:11    Titel: Antworten mit Zitat

Wolle-77 hat Folgendes geschrieben:
Was ich aber besser fände, wäre, wenn Du Dich aus der Sicht AppleScripts dem Thema, der Perle, widmen würdest

Wobei ich AS-Anfänger bin. Aber ich werde mein Bestes geben.

Wolle-77 hat Folgendes geschrieben:
Also wie jemand sich ein externes Perl-Script ausführbar erstellt, ist glaube ich nicht so gefragt.

Ist auch einerseits nur als Einführung gedacht und andererseits essentiell, wenn man längere Scripte nicht unübersichtlich in den AS Code einbetten will, sondern direkt von AS aus aufrufen möchte.

Wolle-77 hat Folgendes geschrieben:
Hier einmal etwas, was mich interessieren würde: Du hast einen Ordner mit Dateien, JPGs. Es gilt, eine HTML-Fotogallerie (inklusive Links zum nächsten Bild usw.) zu erstellen. Mit AppleScript möglich, aber eben eine Schleife.

Um Schleifen kommst Du aber nicht herum.

Wolle-77 hat Folgendes geschrieben:
Wie baut man mit perl -- möglichst Einzeiler, damit innerhalb eines AppleScript-Droplets, eine Schleife, damit perl pro Datei (Dateiname...) nun eine HTML-Datei in Unicode codiert (!) speichert; es gibt ja dann jeweils einen kleineren HTML-Teil, der gleich ist und eben wird dynmaisch die jeweilige Datei eingebaut.

Das wird aber kein Einzeiler!

Ich würde es so machen, wenn ich nicht auf fertige perl module aufbauen wll:
1. Eine Vorlage anlegen in der Platzhalter für das Bild un die Links definiert sind.
2. Dem perl Script die Vorlage und den Ordner übergeben

Wenn also jetzt jemand ein Droplet im Source abliefert, das eine HTML Datei und einen Ordner Akzeptiert und beides dem Perl Script übergibt, dann sähe der ungefähr so aus:
Code:
#!/usr/bin/perl

# Die folgenden 2 Zeilen sollte man immer verwenden,
# wenn man das Script ernsthaft nutzen wiill
# Sie warnen dann vor den gröbsten Schnitzern.
use strict;
use warnings;

# Zuerst mal die übergebenen Namen holen
my ($vorlage, $ordner)= @ARGV;

# testen ob die Reihenfolge verkehrt war
if ( -d $vorlage ) {
   # -d testet ob es sich um ein Directory handelt
   # Wenn $vorlage ein ordner ist, tauschen wir,
   # denn dann stimmte die Reihenfolge nicht
   ($ordner, $vorlage)= ($vorlage, $ordner);
   # Mit der Syntax da oben kann man Variableninhalte vertauschen.
   # In Applescript wäre das
   # set temp to vorlage
   # set vorlage to ordner
   # set ordner to temp
}

# Vorlage einlesen
my ($vorlage_text);
open (my $vorlage_datei, $vorlage) or die "Kann $vorlage nicht lesen: $!\n";
{   local $/; # Das ist ein Trick um alle Zeilen auf einmal einzulesen
    $vorlage_text= <$vorlage_datei>;
   # die <> Notation bedeutet, daß aus einer Datei gelsen wird.
   # Da wir vorher den Zeilenumbruch mit "local" neu definiert haben und
   # ihm keinen Wert gegeben haben, wird alles auf einmal eingelesen.
   # Ansonsten hätte man eine Schleife programmieren müssen udn Zeile für
   # Zeile einlesen bis die Datei zuende ist.
}
close $vorlage_datei;

# Alle Bilddateinamen holen
opendir (my $ordner_lesen, $ordner) or die "Kann $ordner nicht lesen: $!\n";
# Hier öffnen wir einen Folder zum Lesen, d.h. wir können nun einlesen,
# welche datein darin sind.
my @bilder= sort grep /^[^.].*\.(jpg|png|tiff?)$/i, readdir $ordner_lesen;
# Hier wird's heftig!
# readdir liest die Dateinamen ein.
# der grep Befehl filtert nur solche Dateien aus, die
# 1. nicht mit . beginnen (^[^.]) und
# 2. mit jpg, png tif oder tiff
#    in beliebiger Groß-, Kleinschreibung (/i)
#    enden ($)
# sort sortiert alphabetisch
# my @bilder speichert das ganze im array (@) mit namen "bilder"
closedir $ordner_lesen;

# Liste der nächsten und vorherigen Bilder zusammenstellen
my @next= @bilder[1..$#bilder, 0];
my @prev= @bilder[$#bilder, 0..($#bilder-1)];
# @bilder[1..n] bedeutet, daß man von dem Array nur die Einträge 1-n nimmt
# $#bilder ist dabei der letzte Eintrag.
# Also holt @bilder[1..$#bilder, 0]; den 2ten (wir fangen bei 0 an zu zählen()
# bis letzten, gefolgt vom ersten Eintrag
# Wir verschieben also alle Einträge um 1.

my $insgesamt= scalar @bilder;
# Hier gehen wir vom letzten bis zum ersten Bild alle durch
for (my $i= scalar @bilder; $i--;) {
   my $bildnr= $i+1;
   # holen uns den Vorlage Text in eine perl-Standardvariable ($_)
   $_= $vorlage_text;
   # ersetzen die Platzhalter %img%, %rueck%, %vor%, %n%, %i%
   s/%img%/$bilder[$i]/g;
   s/%rueck%/$prev[$i].html/g;
   s/%vor%/$next[$i].html/g;
   s/%n%/$insgesamt/g;
   s/%i%/$bildnr/g;
   # Basteln uns den Ausgabe Dateinamen zusammen
   my $ausgabe= $ordner . '/' . $bilder[$i] . '.html';
   # erzeugen die Datei
   open my $html, '>', $ausgabe or die "Kann $ausgabe nicht erstellen: $!\n";
   # Schreiben den HTML Text da rein
   print $html $_;
   close $html;
}
# Fertig.


Eine passende html könnte so aussehen:
Code:
<html>
   <body>
      <a href="%rueck%">zurueck</href>
      <a href="%vor%">weiter</href>
      <br>
      Bild %i% von %n%
      <br>
      <img src="%img%">
   </body>
</html>


Das perl script muß natürlich per chmod +x einmal ausführbar gemacht werden und kann dann (wenn es fotoalbum heißt und z.B. in Deinem Homedirectory liegt) mit
Code:
do shell script "$HOME/fotoalbum " & quoted form of POSIX path to vorlagedatei & " " & quoted form of POSIX path to Bildordner

aufgerufen werden. Es erzeugt dann für jedes Bild eine zugehörige .html Datei mit dem passenden Inhalt.
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 -> Scripter-Treff 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