Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Heiner •-->

Anmeldedatum: 03.12.2005 Beiträge: 62 Wohnort: Moers
|
Verfasst am: 10.02.2008 - 19:55 Titel: Pfadproblem zum x-ten Mal |
|
|
Hallo allerseits,
ich brauche mal wieder eure Hilfe.
Kurzbeschreibung:
- Mein Programm erzeugt (beim Erststart) für den Benutzer einen Ordner 'Listen_Data':
set pfad to do shell script "mkdir -p ~/Documents/Listen_Data"
- Dieser Ordner kann innerhalb des persönl. Verzeichnises beliebig verschoben werden.
- Der Pfad des Ordners wird jedesmal (bei Bedarf) abgefragt und in einer Variablen 'thePath' abgelegt:
( do shell script "find ~ -name " & suchVerzeichnis & " -type d -print")
Das Ergebnis kann z.B. so aussehen: "~/Documents/Listen_Data"
(Die Tilde ist somit immer dabei!)
- Nun soll eine Datei mit dem Namen 'Titel_Data' in den Ordner 'Listen_Data' abgelegt werden.
Und hier beginnt mein Problem:
In dem folgenden Handler wird die Pfadzusammenstellung filePath nicht verstanden.
Code: |
on sichernTitel()
-- Einsammeln der Daten
set dieListe to ""
set anzahl to (count of data rows of listendaten)
repeat with i from 1 to anzahl
set dieListe to dieListe & (contents of data cell "listen" of data row i of listendaten) & return
end repeat
set dieListe to (dieListe & eof)
log thePath -- "~/Documents/Listen_Data"
try
set filePath to POSIX path of (thePath & "/" & "Titel_Data")
log filePath -- "/~:Documents:Listen_Data:Titel_Data"
set refNum to (open for access file filePath with write permission)
set eof refNum to 0
write dieListe to refNum starting at eof
close access refNum
on error
close access refNum
end try
end sichernTitel
|
Kann mir jemand helfen?
Grüße
Heiner |
|
Nach oben |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 11.02.2008 - 19:24 Titel: |
|
|
Das Problem ist die Tilde (~). Die wird so nicht richtig aufgelöst.
Das siehst du daran, dass du einen Mix aus POSIX & MAC-Pfad hast:
log filePath -- "/~:Documents:Listen_Data:Titel_Data"
Um den Pfad zum Documents-Folder relativ aufzulösen, versuchs mal so:
POSIX path of (((path to "docs") & "Listen_Data:") as text) |
|
Nach oben |
|
 |
Heiner •-->

Anmeldedatum: 03.12.2005 Beiträge: 62 Wohnort: Moers
|
Verfasst am: 11.02.2008 - 19:59 Titel: |
|
|
Hallo iScript,
folgender Befehl tut's:
Code: | set a to (path to "docs") & "Listen_Data:" & "TitelData" as string |
Das Problem ist aber ein ganz anderes.
Der Benutzer des Programms (auf einem ganz anderen Rechner) kann den vom Programm erstellten Ordner 'Listen_Data' (für den das Programm das Verzeichnis 'Dokumente' nur als 'default location' auswählt) beliebig verschieben. So, dass z.B. der abgefragte Pfad (user location) folgende Form haben kann:
log thePath -> ~/Ordner1/Ordner2/Listen_Data,
oder
log thePath -> ~/Documents/Ordner1/Listen_Data.
Das Problem ist, wie 'übersetzt' man ganz allgemein diesen Pfad?
Gruß
Heiner |
|
Nach oben |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 11.02.2008 - 20:12 Titel: |
|
|
POSIX path of (path to "cusr") statt "~"
Die Tilde löst (soweit ich weiss) nur die shell richtig auf.
z.B. so:
do shell script "cd ~;pwd" |
|
Nach oben |
|
 |
Heiner •-->

Anmeldedatum: 03.12.2005 Beiträge: 62 Wohnort: Moers
|
Verfasst am: 11.02.2008 - 20:50 Titel: |
|
|
Ich habe eine 'klassische' (?) Lösung gefunden. Ein ziemlich umständliches Gebastele, aber es scheint zu funktionieren. Die entsptechenden Zeilen lauten:
Code: | try
set a to (POSIX file thePath) as string
set anz to count of items of a
set anhang to ""
repeat with i from 4 to anz
set anhang to anhang & item i of a
end repeat
set basis to path to "cusr" as string
set filePath to basis & anhang & ":TitelData" as string
set refNum to (open for access file filePath with write permission)
set eof refNum to 0
write dieListe to refNum starting at eof
close access refNum
on error
close access refNum
end try
|
Deinen Lösungsvorschlag über shell script werde ich mal in Ruhe überprüfen. Ich melde mich wieder!
Danke
Heiner |
|
Nach oben |
|
 |
Heiner •-->

Anmeldedatum: 03.12.2005 Beiträge: 62 Wohnort: Moers
|
Verfasst am: 12.02.2008 - 22:09 Titel: |
|
|
Hallo iScript,
ich hab noch mal im UNIX-Schmöker nachgelesen, aber leider ist es mir nicht gelungen, mit Hilfe von cd und pwd den Pfad herauszulösen. (Um ehrlich zu sein, ich kann das auch gar nicht so richtig.)
Macht nix, die AS-Lösung tut es ja auch.
Noch mal Danke
Heiner |
|
Nach oben |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 12.02.2008 - 23:07 Titel: |
|
|
do shell script "cd ~;pwd"
liefert dir den pfad zum home-directory als string in POSIX-Manier:
"/Users/username"
sprich: die tilde wird aufgelöst.
bewirkt also exakt das gleiche wie:
POSIX path of (path to "cusr")
cd ~ wechselt in das homeverzeichnis
; hängt den nächsten befehl an
pwd gibt das aktuelle verzeichnis aus
diesen pfad kannst du dann beliebig wieder zusammenfrickeln mit deinem suchergebnis. oder aber du bleibst in der shell, und schreibst auch per shell in deine datei. |
|
Nach oben |
|
 |
Heiner •-->

Anmeldedatum: 03.12.2005 Beiträge: 62 Wohnort: Moers
|
Verfasst am: 13.02.2008 - 13:05 Titel: |
|
|
In der Tat: beide Befehle liefern (bis auf das slash (/) ) am Ende das gleiche Ergebnis.
Und was das Schreiben in eine Datei per shell angeht, so bleibe ich lieber Schuster.
Grüße
Heiner |
|
Nach oben |
|
 |
jiuer7845 •---->

Anmeldedatum: 06.04.2021 Beiträge: 521
|
|
Nach oben |
|
 |
|