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

Leerzeichen im Pfad durch '\ ' (backslash, space) ersetzen

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


Anmeldedatum: 03.12.2005
Beiträge: 62
Wohnort: Moers

BeitragVerfasst am: 14.03.2006 - 20:35    Titel: Leerzeichen im Pfad durch '\ ' (backslash, space) ersetzen Antworten mit Zitat

Hallo allerseits,
es ist in diesem Forum schon oft angesprochen worden, aber ich hab's wohl immer noch nicht verstanden und ich finde auch die entsprechenden Stellen nicht mehr. Das Problem mit der Pfaden:

Z.B. set path to "~/Documents/Meine Datei" wird so nicht verstanden, weil ein Leerzeichen vorkommt. Ich möchte also in einem Pfad die (eventuell) vorkommenden Leerzeichen durch '\ ' (backslash, space) ersetzen. Meine Versuche mit dem Terminal und AS verliefen sehr unterschiedlich.

Auf dem Terminal klappt es:
% echo "Meine Datei" | sed 's/[\" "]/\\ &/g'
Meine\ Datei

Aber in meinem Skript kommt es, wie auch immer ich die 'Hieroglyphen' setze, zu Fehlermeldungen. Z.B. auch somit:

set path to "~/Documents/Meine Datei"
set myPath to do shell script "echo" & path & "| sed 's/[\" "]/\\ &/g'"

(Die klassische Methode mit Suchen und Ersetzen in AS führt zum gleichen Problem.)
Wo liegt der Fehler? Wer erklärt es mir nochmal?

Grüße Heiner
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1955
Wohnort: Deiningen

BeitragVerfasst am: 15.03.2006 - 01:44    Titel: Antworten mit Zitat

Hallo Heiner,

du brauchst nicht extra mit Suchen/Ersetzen zu arbeiten. AppleScript sieht für diesen Fall 'quoted form' vor.

Pfadangaben mit Leerzeichen müssen in einfache Anführungszeichen gesetzt werden, damit sie per Shell-Befehl verarbeitet werden können. Genau das macht nun 'quoted form'.

Kleines Beispiel zum Testen (bitte Datei mit Leerzeichen im Namen auswählen):

set MacPfad to choose file

set UnixPfad to quoted form of POSIX path of MacPfad


Nun das Ergebnis begutachten.
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Heiner
•-->
•-->


Anmeldedatum: 03.12.2005
Beiträge: 62
Wohnort: Moers

BeitragVerfasst am: 17.03.2006 - 15:36    Titel: Antworten mit Zitat

Hallo Snow,
vielen Dank für Deine rasche Antwort und Deinen Tip!

Zunächst, er funktioniert in der Form, die Du angegeben hast wirklich gut.
Aber - und das erklärt meine verzögerte Antwort - bei mir tauchen doch einige Probleme auf, die ich so schnell nicht in den Griff kriege. Allerdings nur dann, wenn ich in den Verzeichnisnamen Leerzeichen zulassen, ansonsten läuft das Programm gut.
Zum besseren Verständnis will ich die Teile des Programms, die davon betroffen sind kurz skizzieren.

Der Benutzer des Programms soll seine Daten in einem Verzeichnis ablegen, das es für ihn anlegt. Der geeignete Ort ist wohl im persönlichen Verzeichnis das Verzeichnis 'Dokumente'. Also: Falls es noch nicht existiert, ein neues Verzeichnis 'Meine.Dateien' anlegen!

property defaultLocation : "~/Documents/Meine.Dateien"
property userLocation : ""
-- userLocation wird bei Beendigung über 'user dafaults' gespeichert, bzw. beim Start wieder eingelesen
.
.
on SichernAls()
if userLocation is equal to "" then
set thePath to defaultLocation
else
set thePath to userLocation
end if

(* Jetzt suchen, ob das Verzeichnis 'Meine.Dateien" noch über thePath zu erreichen ist. Der Benutzer könnte es entweder gelöscht oder verschoben haben.
Dazu muss aber das letzte Item des Pfades (Meine.Dateien) glöscht werden.
Mir ist nichts Besseres eingefallen, als den Pfad zu zerlegen und neu zusammen zu setzen. Gibt es einen intelligenteren Vorschlag?*)

set oldTextItemDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to {"/"}
set lastItem to last text item of thePath
set newPath to ""
repeat with i from 1 to (count text items of thePath)
if text item i of thePath is not lastItem then
set newPath to newPath & (text item i of thePath) & "/"
else
exit repeat
end if
end repeat
set AppleScript's text item delimiters to oldTextItemDelimiters

-- Existiert ein Verzeichnis "Meine.Dateien"im Verzeichnis

set folderList to do shell script "ls -1 " & newPath -- Liste aller Inhalte im Verzeichnis

if "Meine.Dateien" is not in folderList then -- falls nicht, Suche!
findePfad()
else
SichernAls2() -- dann sichern wie sonst
end if
end SichernAls

.
.
on findePfad() -- Suche Datei und erzeuge ggfs ein neues Verzeichnis im Verzeichnis 'Dokumente'
if FindePanel is equal to missing value then -- über den Fortschritt der Aktion wird der Benutzer über ein Panel informiert
load nib "SuchenPanel"
set FindePanel to window "Suchen"
end if
tell FindePanel
set uses threaded animation of progress indicator "progressIndikator" to true
tell progress indicator "progressIndikator" to start
set enabled of button "OK" to false
set enabled of text field "pfadname" to false
end tell
show FindePanel in front of front window -- Panel in den Vordergrund bringen


set suchVerzeichnis to "Meine.Dateien"
set pfad to do shell script "find ~ -name " & suchVerzeichnis & " -type d -print"

-- falls nicht vorhanden, dann suchen

if (pfad is "") then -- nicht vorhanden

set saveDirectory to do shell script "mkdir -p " & defaultLocation" -- erzeuge den Ordner 'Meine.Dateien' im Ordner 'Dokumente'

set text2 to "Das Verzeichnis 'Meine.Dateien' liegt nicht im persönlichen Verzeichnis." & return & "Das Verzeichnis 'Meine.Dateien' ist im Verzeichnis 'Dokumente' neu angelegt."
set contents of text field "infoFeld" of window "Suchen" to text2
set contents of text field "pfadname" of window "Suchen" to "Pfad: " & defaultLocation
set newPath to defaultLocation -- für open- und save-panel
set userLocation to pfad -- für preferences
else if (".Trash" is in pfad) then -- liegt im Papierkorb

set saveDirectory to do shell script "mkdir -p " & defaultLocation" -- erzeuge den Ordner 'Meine.Dateien' im Ordner 'Dokumente'

set text2 to "Das Verzeichnis 'Meine.Dateien' liegt im Papierkorb." & return & "Das Verzeichnis 'Meine.Dateien' ist im Verzeichnis 'Dokumente' neu angelegt."
set contents of text field "infoFeld" of window "Suchen" to text2
set contents of text field "pfadname" of window "Suchen" to "Pfad: " & defaultLocation
set userLocation to pfad -- für preferences
else if (pfad is not "") and (".Trash" is not in pfad) then
set text1 to "Das Verzeichnis 'Meine.Dateien' ist gefunden." & return
set contents of text field "infoFeld" of window "Suchen" to text1
set contents of text field "pfadname" of window "Suchen" to "Pfad: " & pfad
set saveDirectory to pfad
set userLocation to pfad -- für preferences
end if

tell FindePanel
set uses threaded animation of progress indicator "progressIndikator" to false
tell progress indicator "progressIndikator" to stop
set enabled of button "OK" to true
end tell
end findePfad


Wie gesagt, so funktioniert es. Ich vermute, dass Problem ist die Form von defaultLocation, die vorgegeben ist, und das jeder Benutzer (Rechner) über das Kürzel ~ (Home directory) angesprochen werden muss.

Für Lösungsvorschläge bin ich dankbar.

Grüße

Heiner
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Heiner
•-->
•-->


Anmeldedatum: 03.12.2005
Beiträge: 62
Wohnort: Moers

BeitragVerfasst am: 20.03.2006 - 13:39    Titel: Antworten mit Zitat

Mein Problem ist gelöst!

Für Diejenigen, die es interessiert:

Will man über einen UNIX-Pfad ein Verzeichnis mit einem Leerzeichen in seinem Namen einfügen, dann darf nicht der gesamte Pfadnamen als 'quoted form' eingegeben werden, sondern lediglich nur der einzelne Name.
Z.B. set pathToDirectory to do shell script "mkdir -p ~/Documents/'Mein neuer Ordner'".
Erzeugt einen neuen Ordner ('Mein neuer Ordner') im Ordner 'Dokumente' im persönlichen Ordner (HOME).

Wie immer, im Nachhinein ist alles klar.

Heiner
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Studio Forum 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