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

Teil einer Textzeile ersetzen

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


Anmeldedatum: 14.03.2007
Beiträge: 18

BeitragVerfasst am: 22.04.2007 - 09:28    Titel: Teil einer Textzeile ersetzen Antworten mit Zitat

Hallo Leute.

Wiedermal ein Problem.
Im Workshop habe ich keine Lösung gefunden.
Habe keine Ahnung wie ich den Hebel ansetzen soll.

Aufgabe:
Habe eine eine Text Datei erstellt mit folgenden Inhalt:

Rechnername=Micky
StaticIP=192.168.100.xxx
Musik="Volumes:Musik:"
Bilder="Volumes:Bilder:"
Scripts="Mac HD1:Scripts:"
Module="Mac HD1:Scripts:Module:"
Backup1=
Backup2=

Wenn ich ein Script ausführe wird im Text nachgeschaut wo sich die "Module" befinden, der Pfad wird aus dem Text gelesen und das Script arbeitet weiter mit dem gelesenen Pfad.
Bei Musik das gleiche:
Schauen wo ist Musik, wo Sicherungsordner, Aktion durchführen.

Frage 1.
Wie Lese ich eine Zeile die mit Musik beginnt?
Delimiter wäre in diesem Fall "="

Frage 2.
Wie ersetze ich mit AS den Pfad in der Zeile "Musik"?

Frage 3.
Wie setze ich z.B. die Markierung an den Anfang der Dritten Zeile?

Fazit:
Property kommt bei dieser Aufgabe nicht in frage, da diese Datei von mehreren Scripts verwendet wird. Zugriff von mehreren Seiten auf eine Property würde das Problem lösen, leider geht es nicht.

Besten Dank im Voraus.
_________________
OS 10.11
MacMini DC2 2000MB.
Mac Mini Server QC 2300, 16GB
iPhone 4, 5
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 22.04.2007 - 10:09    Titel: Antworten mit Zitat

Hallo TommyC
So z.B. könntest Du's mit AS-Mitteln machen.
Es gibt natürlich noch ungefähr 13 andere Möglichkeiten.
Die Shell wäre natürlich eine von diesen Möglichkeiten, die wiederum 18 Möglichkeiten bietet Wink
Den read-Befehl habe ich jetzt der Einfachheit halber mal etwas hingeschlampt (ohne open/close for access). Siehe Workshop read/write.

set absaetze to paragraphs of (read file ((path to "desk" as text) & "TommyC.txt"))
-- ERGEBNIS:
-- {"Rechnername=Micky ", "StaticIP=192.168.100.xxx ", "Musik=\"Volumes:Musik:\" ", "Bilder=\"Volumes:Bilder:\" ", "Scripts=\"Mac HD1:Scripts:\" ", "Module=\"Mac HD1:Scripts:Module:\" ", "Backup1= ", "Backup2= ", ""}
set AppleScript's text item delimiters to "="
repeat with absatz in absaetze
   set part to absatz's text items
   if item 1 of part is "Musik" then set varMusik to text 1 thru -2 of item 2 of part
   if item 1 of part is "Rechnername" then set varRechner to text 1 thru -2 of item 2 of part
   -- usw.
end repeat
set AppleScript's text item delimiters to ""
-- wenn du willst, kannst du dann alles in einen record speichern
set Alles to {Musik:varMusik, Rechnername:varRechner}
-- und so kannst du Teile (hier z.B. Musik) aus dem record auslesen
return Musik of Alles


zu 3.
get offset of "Musik=" in (read file ((path to "desk" as text) & "TommyC.txt"))

Am einfachsten wäre doch aber: alles lesen, zu ändern, und alles zurückschreiben (überschreiben), oder spricht etwas dagegen?
_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 24.04.2007 - 13:35    Titel: Antworten mit Zitat

Hallo...

folgender Maßen würde das per Shell-Befehle gehen. Ist nur eine Alternative – Nachteil ist auch, daß die Textdatei, die genau wie bei iScripts Script vorhanden sein muß, Unix-Zeilenenden (LF) hat; dies kann man beispielsweise in TextWrangler einstellen.
Code:

set Frage_1 to do shell script "cat " & (quoted form of POSIX path of ((path to "desk" as text) & "TommyC.txt")) & " | grep '^Musik=\"' | sed 's/.*\"\\(.*\\)\"/\\1/'"

set Frage_2 to do shell script "cat " & (quoted form of POSIX path of ((path to "desk" as text) & "TommyC.txt")) & " | sed 's/^Musik=\"\\(.*\\)\"/Musik=\"Volumes:Neuer_Pfad:Musik_neu\"/' > ~/Desktop/TommyC.txt"

Vorteil ist, daß es pro Anforderung nur eine Zeile ist und die Ausführung deutlich schneller abläuft. Am Besten im Editor betrachten – es ist nicht so kompliziert, wie es hier anmutet.
_________________
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: 24.04.2007 - 20:44    Titel: Antworten mit Zitat

Hier mein Vorschlag mit (TADA!) Perl Wink
Code:
-- für alle
set config_datei to quoted form of POSIX path of ((path to "desk" as text) & "TommyC.txt")

set Frage_1 to do shell script "perl -ne '
   print qq($1\\n) if /^Musik=\"(.*)\"/;
   ' " & config_datei

set neuer_Pfad to "Volumes:Neuer_Pfad:Musik_neu"
set Frage_2 to do shell script "perl -i.bak -pe '
   s/(?<=^Musik=\").*(?=\")/" & neuer_Pfad & "/;
   ' " & config_datei

set zeile to 3
set markierung to "HIER!"
set Frage_3 to do shell script "perl -i.bak -pe '
   $_=q\"" & markierung & "\" . $_ if $.==" & zeile & ";
   ' " & config_datei


Zu beachten ist, wie auch bei Wolle's Vorschlag, daß gegebenenfalls Zeichen zu "escapen" sind. Falls Du mehr dazu wissen mußt, frag.

Zu beachten weiter: Die Lösungen zu 2 und 3 sollten nicht so hintereinander verwendet werden.

Grund: Beide legen einen Backup der Originaldatei an. Bei 3 ist aber schon ein Backup (durch 2) erzeugt worden.

Wenn Du sowas also mehrfach benötigst, dann verwende die Zeichenfolge ".bak" nur beim ersten Aufruf um nur da eine Backup Datei anzulegen.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
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