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

Werte aus Liste auslesen und zeilenweise anzeigen

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


Anmeldedatum: 06.05.2010
Beiträge: 4
Wohnort: Haßfurt (Unterfranken)

BeitragVerfasst am: 06.05.2010 - 17:51    Titel: Werte aus Liste auslesen und zeilenweise anzeigen Antworten mit Zitat

Hallo miteinander.

Hier bin ich - ein Anfänger! Wieder einer, hehe. Laughing

Folgende Frage - für die ich bisher keine Lösung finden konnte:
Ich habe einen Ordner auf dem Desktop, der automatisch erfasst wenn neue Files in den Ordner gelegt werden. Die Dateinamen dieser Files werden in eine Liste geschrieben. Dann geht ein Dialog-Fenster auf, in dem die einzelnen Files (ohne kompletten Pfad) angezeigt werden.

Prinzipiell geht das schon, das Script sieht so aus:

Code:

property dialog_timeout : 30

on adding folder items to this_folder after receiving added_items
  try
     
   tell application "Finder"
     set the folder_name to the name of this_folder
   end tell
            
   set the file_count to the number of items in the added_items
   set listOfFiles_long to {}
      
   tell application "Finder"
    set filelist to every file of this_folder
     repeat with currentFile in filelist
       set currentFileName to (the name of currentFile)
       set end of listOfFiles_long to currentFileName
     end repeat
   end tell
      
      
   set message_1 to {} as Unicode text
   set message_1 to message_1 & "Items in Folder " & "'" & (the folder_name as text) & "'" & " : "
   set message_1 to message_1 & (the file_count as text)
   set message_1 to message_1 & return & return
   set message_1 to message_1 & (listOfFiles_long)
      
   display dialog the message_1 giving up after dialog_timeout
      
 end try
end adding folder items to



Mein Problem:
Wenn mehrere Dateien in den Ordner geschoben werden, werden die einzelnen Listeneinträge (also die Dateinamen) immer hintereinander, ohne Leerzeichen, Komma, Punkt o.ä., im "PopUp"-Dialog angezeigt.
Also so: Bild1.jpgBild2.jpgBild3.jpg undsoweiter

Wie schaffe ich es, das mir jeder Listeneintrag (also jede Datei) UNTEREINANDER und evtl auch mit Komma oder Punkt danach angezeigt wird.
Also so:
Bild1.jpg
Bild2.jpg
Bild3.jpg

Irgendwie fehlt mir da der Denkansatz um das zu realisieren.
Wenn mich jemand auf die richtige Spur bringen könnte, wäre das klasse.

Danke schonmal,
Grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ShooTerKo
•--->
•--->


Anmeldedatum: 21.03.2006
Beiträge: 221
Wohnort: Hamburg

BeitragVerfasst am: 06.05.2010 - 22:07    Titel: Antworten mit Zitat

Hallo, Medienmacher,
für mich als ehem. Mediengestalterausbilder klingt der Name sehr sympathisch Wink

Ich muss gestehen, dass ich den Sinn des Programms nicht ganz verstehe, aber darum geht es hier ja nicht...

Also, kleine Erklärung:
Wenn du ein Applescript-Liste zu einem String wandelst, hängt Applescript alle Einzelteile aneinander, getrennt durch die sog. "Applescript's text item delimiters".
Dein Problem ist darin begründet, dass der Standardwert des Delimiters der Leerstring "" ist und deshalb alle Elemente der Liste direkt aneinander hängen.

Die Lösung ist, dir vorsichtshalber den alten Delimiter zu merken, ihn auf Newline (return) zu setzen und dann deine Liste zu einem String zu wandeln. Danach musst du den Delimiter wieder zurücksetzen.

Code:
-- alten Wert merken
set oldDelimiter to Applescript's text item delimiters
-- neuen Wert (return) setzen
set  Applescript's text item delimiters to return
-- Liste zu String wandeln
set message_1 to message_1 & (listOfFiles_long)
-- Delimiter wieder auf alten Wert setzen
set  Applescript's text item delimiters to oldDelimiter


Viele Grüße und weiterhin viel Spaß mit Applescript Razz

CU
ShooTerKo
_________________
"It is a mistake to think you can solve any major problems just with potatoes." - Douglas Adams
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Medienmacher
•->
•->


Anmeldedatum: 06.05.2010
Beiträge: 4
Wohnort: Haßfurt (Unterfranken)

BeitragVerfasst am: 07.05.2010 - 14:03    Titel: Antworten mit Zitat

Hallo ShooTerKo.

Schön das dir mein Name gefällt. Very Happy

Vielen Dank für die Hilfe - funktioniert einwandfrei. Großartig! Wär ich nie darauf gekommen - wo findet man denn solche Infos wenn man sie mal braucht?


Es ist wahrscheinlich etwas "off-topic", aber ich hätt da noch gern ein zweites Problem, an dem ich mir seit heute Morgen die Zähne ausbeisse.
Und zwar möchte ich eine Text-Datei erstellen, in die alle Dateien, die in den Ordner geschoben werden, eingetragen werden. Das haut eigentlich auch hin, allerdings verweifle ich an dem Ort dieser Text-Datei.

Struktur wie folgt:
/Desktop/Hauptordner/Unterordner
(der Unterordner heisst "log_file")


Code:

set this_folder_path to this_folder
set subfolder_name to "log_file"

tell application "Finder"
  if (exists folder subfolder_name of this_folder) is false then
     display dialog "Subfolder 'log_file' does not exist and will be created" buttons ("OK") default button 1
    make new folder at this_folder_path with properties {name:"log_file"}
  end if
      
   
  set logFilePath to this_folder as string
  set logFilePath to logFilePath & subfolder_name
  set logFile to (((logFilePath) as string) & "log_file.txt") as file specification
end tell


tell application "Finder"
  set ReferenceNumber to open for access logFile with write permission
         
  set filelist to every file of this_folder
    repeat with currentFile in filelist
      set currentFileName to (the name of currentFile)
      set end of listOfFiles_long to currentFileName
         
      try
        write currentFileName & return to ReferenceNumber
        close access ReferenceNumber
        display dialog "File access OK" buttons ("OK")
          error
        close access ReferenceNumber
        display dialog "log file could not be opened" buttons ("OK")
     end try
            
  end repeat
  end tell



An sich funktioniert das, aber meine Text-Datei wird nicht im Unterordner (log_file) abgelegt, sondern immer im Hauptordner. Die Datei heisst dann "Unterordnerlog_file.txt".

Wie krieg ich es denn hin das die Text-Datei im Unterordner angelegt wird?


Danke!!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ShooTerKo
•--->
•--->


Anmeldedatum: 21.03.2006
Beiträge: 221
Wohnort: Hamburg

BeitragVerfasst am: 07.05.2010 - 20:29    Titel: Antworten mit Zitat

Hi!
Wenn du vor
Code:
  set logFile to (((logFilePath) as string) & "log_file.txt") as file specification
mal ein
Code:
display dialog (((logFilePath) as string) & "log_file.txt") as string
machst, (übrigens eine Menge Klammern bei dir Wink ) wirst du wahrscheinlich sehen, dass zwischen dem logFilePath und dem log_file.txt das Ordnertrennzeichen des Pfades fehlt. Bei Apple ist das meist der Doppelpunkt ":", im UNIX der Slash "/".

Die Lösung ist simpel:
Code:
  set logFile to (((logFilePath) as string) & ":log_file.txt") as file specification
(beachte den ergänzten Doppelpunkt)

Lösung für Fortgeschrittene:
Code:
  set logFile to (((logFilePath as alias) as string) & "log_file.txt") as file specification
Beachte das "as alias". logFilePath ist übrigens schon ein String. Durch die Anweisung "as alias" teilen wir Applescript mit, dass dieser String zu einem Verweis zu einer Datei gemacht werden soll. Dass der Pfad existiert, haben wir ja vorher sicher gestellt, sonst würde es auch eine Fehlermeldung geben! Wenn jedoch ein Alias wieder zu einem String gewandelt wird, hängt Applescript bei Ordnern automatisch einen Doppelpunkt an, bei Dateien nicht. Durch diese Wandlung zum Alias und wieder zum String erhalten wir also auf magische Weise unseren fehlenden Doppelpunkt Wink

Doch gehen wir einen Schritt weiter:
Wir haben gesehen, dass die Anweisung "as alias" bei Nichtvorhandensein der Datei einen Fehler produziert. Und wenn ich dir jetzt noch sage, dass die Anweisung "make new folder..." ein Alias auf den neu erstellten Ordner zurückliefert, dann landen wir schnell bei dieser Lösung:

Code:
set this_folder to path to desktop folder
set this_folder_path to this_folder as string
set subfolder_name to "log_file"

tell application "Finder"
   try
      set logFilePathAlias to this_folder_path & subfolder_name as alias
   on error
      display dialog "Subfolder 'log_file' does not exist and will be created" buttons ("OK") default button 1
      set logFilePathAlias to make new folder at this_folder_path with properties {name:"log_file"}
   end try
   
   set logFile to ((logFilePathAlias as string) & "log_file.txt") as file specification
end tell


Viel Spaß beim Arbeitsweise durchleuchten Wink

Viele Grüße aus Hamburg,
CU
ShooTerKo
_________________
"It is a mistake to think you can solve any major problems just with potatoes." - Douglas Adams
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Medienmacher
•->
•->


Anmeldedatum: 06.05.2010
Beiträge: 4
Wohnort: Haßfurt (Unterfranken)

BeitragVerfasst am: 10.05.2010 - 16:00    Titel: Antworten mit Zitat

Mensch ShooTerKo...
du solltest Bücher schreiben. Sehr toll erklärt, vielen Dank!!
Das mit dem Doppelpunkt ist die Lösung für mich gewesen, damit funktioniert es. Ich hab zwar mittlerweile schon wieder neue Probleme Very Happy aber ich versuch mich da mal durchzukämpfen.

Kurz du deinem "Script für Fortgeschrittene":
Ich hab das mal ausprobiert, aber bei mir haut das nicht hin. Der Unterordner wird bei Nichtvorhandensein nicht erstellt. Ich finde mit meinem bescheidenen Wissen aber auch keine Fehler...

So zumindest macht`s bei mir nix:
Code:


on adding folder items to this_folder after receiving added_items
  try
   set this_folder to path to desktop folder
   set this_folder_path to this_folder as string
   set subfolder_name to "log_file"
      
   tell application "Finder"
     try
   set logFilePathAlias to this_folder_path & subfolder_name as alias
   on error
   display dialog "Subfolder 'log_file' does not exist and will be created" buttons ("OK") default button 1
   set logFilePathAlias to make new folder at this_folder_path with properties {name:"log_file"}
     end try
         
    set logFile to ((logFilePathAlias as string) & "log_file.txt") as file specification
end tell
      

display dialog "logFile: " & (logFile as text) buttons ("OK")
         
      end try   
end adding folder items to


Viele Grüße und nochmals Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ShooTerKo
•--->
•--->


Anmeldedatum: 21.03.2006
Beiträge: 221
Wohnort: Hamburg

BeitragVerfasst am: 10.05.2010 - 16:13    Titel: Antworten mit Zitat

Hm, dann lass uns mal zusammen Applescript-typisch debuggen:
Du hast ziemlich schnell ein try-Statement und kurz vor Ende das dazugehörige end try. Dadurch werden eventuell auftretende Fehler in dem Sinne abgefangen, dass das Script zumindest nicht stoppt. Lass uns jedoch zum Debuggen einen auftretenden Fehler darstellen. Wahrscheinlich hilft uns das dann weiter:
Code:
      on error errStr
            display dialog errStr
      end try   
end adding folder items to
Ein auftretender Fehler zwingt Applescript dazu, in den on error...-Block (wenn vorhanden Wink) zu wechseln. Dort können wir uns den Fehler anzeigen lassen.

Was meldet dir das Script jetzt?

Übrigens müssen im Script buttons ("OK") die Klammern die geschweiften Klammern {"OK"} sein, da es sich um eine Liste handelt, vielleicht ist das ja schon der Fehler... *Spannung aufbau*

Und danke für das Lob. Leider bin ich nicht mehr allzu oft hier unterwegs, aber wenn, dann gebe ich mir Mühe Smile

Viele Grüße,
ShooTerKo
_________________
"It is a mistake to think you can solve any major problems just with potatoes." - Douglas Adams
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Medienmacher
•->
•->


Anmeldedatum: 06.05.2010
Beiträge: 4
Wohnort: Haßfurt (Unterfranken)

BeitragVerfasst am: 11.05.2010 - 11:38    Titel: Antworten mit Zitat

Okay... und wieder was gelernt. Try und On Error sind nun klar. Danke! Very Happy

Hab den Fehler gefunden:
Es lag an den Pfaden bzw. an der Definition von this_folder.
Ganz "oben" im Code, bei der Definition der Pfade muss die Zeile
Code:
set this_folder to path to desktop folder
raus.


Und beim Erstellen des Ordners muss this_folder_path dann ein Alias sein:
Code:

on error
  display dialog "Subfolder 'log_file' does not exist and will be created" buttons ("OK") default button 1
  set logFilePathAlias to make new folder at (this_folder_path as alias) with properties {name:"log_file"}



Das die Buttons in runden Klammern sind, macht in diesem Fall nichts. Aber gut zu wissen...

Und weiter geht`s auf der Suche nach neuen Herausforderungen & Problemen, hehe. Very Happy

CU
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