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

Dateinamen einlesen

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
scripter
•->
•->


Anmeldedatum: 23.03.2001
Beiträge: 3

BeitragVerfasst am: 27.03.2001 - 10:41    Titel: Dateinamen einlesen Antworten mit Zitat

Hallo,

ich will/muß einen Ordner mit ca. 23.000 ISO - Draw - Dateien auf Ihre richtige Syntax prüfen.
Bei einer Änderung der Ordnerstruktur (z.B. Unterordner) müßten bereits bestehende Scripte geändert werden.

Mit
set dateinamen to name of every file of folder "ordner" of disk "laufwerk"
erhalte ich die Fehlermeldung "Out of memory". In Eurem Forum habe ich in Erfahrung gebracht, dass das an der Beschränkung auf 32 kB für Variablen liegt.

Mit

set anzahl to count files in "folder" ordner of disk "laufwerk"
repeat with i from 1 to anzahl
set dateiname to name of item i of folder "ordner" of disk "laufwerk"
-- restliche anweisungen
end repeat

läuft das Script, doch es ist extrem langsam (ca. 4 Minuten pro Dateiname!!!!).

Hat jemand noch eine Idee, wie sich dieses Problem elganter und vor allem schneller lösen läst.

Bereits jetzt schon vielen Dank für Eure zahlreichen Zuschriften.

scripter
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
macgix
•--->
•--->


Anmeldedatum: 13.12.2000
Beiträge: 206
Wohnort: K–ln

BeitragVerfasst am: 09.04.2001 - 04:30    Titel: Dateinamen einlesen Antworten mit Zitat

Es bedarf eines rekursiven Handlers, der die Ordnerstruktur durchforstet. Ich poste hier mal ein Template dazu. Vielleicht hilft das weiter. Ich kann auch noch ein Script posten, das Text in "32k Chunks" verarbeitet, aber das benötigt man eher bei der Verarbeitung von HTML-Dateien...

Hier das Template:

-- - Skriptbeginn

property cr2 : return & return

property tG : {}
property tF : {}
property tGl : {}
property tFl : {}

property tNeinfList : {(("Icon" & return) as text), "DesktopPrinters DB", ("OpenFolderListDF" & return as text)} & (list disks)

-----------------------------------------------------------------------------------------

(*

You will only have to modify this two handlers to let the script do your own stuff

*)

--
-- First handler handling on the File
--
on handleOnFile(theFile)

-- Mache etwa mit "theFile" (ein Dateipfad!)
-- Mehr Informationen über "theFile" enthält der "ProcessAFile(theFile)"-Handler, welcher (info for) bereits ausgelesen hat!

-- Die Handler "Initialize()" und "Finalize()" werden nur EINMAL ausgeführt und dürfen gerne modifiziert werden!

end handleOnFile

--
-- Second handler handling on the File (alternate handler)
--
on alternateHandleOnFile(tFilePath)
-- Dieser "Handler" wird ausgeführt, wenn der "handleOnFile()"-Handler einen Fehler geliefert hat!
-- Sie sollten dennoch immer zuerst den Scriptcode des "handleOnFile()"-Handlers zuerst überprüfen!
return tFilePath
end alternateHandleOnFile

--------------------------------------------------------------------------------------
--
on Initialize()
set tF to {}
set tG to {}
set tFl to {}
set tGl to {}
end Initialize
--
on Finalize()
end Finalize
--
on open of filesList
activate
try
if displayMess() is true then
my UserMessage(1, "Ich bin für eine Weile beschäftigt!", "", "", "")
try
tell application "Finder" to set tName to (name of item (filesList as text))
end try
if tName is not in tNeinfList then
set tInfo to info for filesList
if folder of tInfo then
my Initialize()
repeat with aFile in filesList
set theFileInfo to info for aFile
if folder of theFileInfo then
my ProcessAFileOrFolder((contents of aFile))
end if
end repeat
my Finalize()
else
error "Falsches Objekt!" & return & return & ¨
"Sie sollten nur Ordner auswählen, keine Dateien!"
end if
else
activate me
error "Falsches Objekt!" & return & return & ¨
"Sie sollten nur Ordner auswählen, keine Laufwerke!"
end if
try
dd uninstall
end try
activate me
display dialog "Alle Dateien im gewählten Ordner wurden gelöscht oder in den Papierkorb bewegt!" buttons {"OK"} default button 1 with icon note
end if
on error errtext number errnum
if my ProgrammError(errtext, errnum) is false then return false
end try
end open
--
on run
try
if displayMess() is true then
tell application "Finder"
activate
set theFolder to (choose folder)
end tell
UserMessage(1, "Ich bin für eine Weile beschäftigt!", "", "", "")
if theFolder != "" then
with timeout of 180 seconds
try
tell application "Finder" to set tName to (name of item (theFolder as text))
if tName is not in tNeinfList then
set tInfo to info for theFolder
if folder of tInfo then
my doIt(theFolder)
end if
else
error "Falsches Objekt!" & return & return & ¨
"Sie sollten nur Ordner auswählen, keine Laufwerke!"
end if
on error errtext number errnum
my errMe(errtext, errnum)
end try
-- return {tF, tFl, tG, tGl}
end timeout
end if
try
dd uninstall
end try
activate me
display dialog "Alle Dateien im gewählten Ordner wurden gelöscht oder in den Papierkorb bewegt!" buttons {"OK"} default button 1 with icon note
end if
on error errtext number errnum
if my ProgrammError(errtext, errnum) is false then return false
end try
end run
--
on doIt(theFolder)
my Initialize()
my ScanAFolder(theFolder)
my Finalize()
end doIt
--
on ProcessAFile(theFile)
try
set theFileInfo to info for theFile
set tN to (name of theFileInfo)
if tN is not in tNeinfList then

-- Here the file will be processed
try
my handleOnFile(theFile)
on error
my alternateHandleOnFile(theFile)
end try
-- Replace the handlers code with your own above

end if
end try
end ProcessAFile
--
on ProcessAFileOrFolder(theFile)
set theFileInfo to info for theFile
if folder of theFileInfo then
my ScanAFolder(theFile)
else
my ProcessAFile(theFile)
end if
end ProcessAFileOrFolder
--
on ScanAFolder(theFolder)
set fileNames to list folder theFolder
repeat with aFile in fileNames
set theFile to (theFolder as string) & contents of aFile
my ProcessAFileOrFolder(alias theFile)
end repeat
end ScanAFolder
--
on errMe(ex, en)
activate me
set temp to button returned of (display dialog ("Fehler: " & en & return & return & ex) buttons {"Beenden", "Fortfahren"} default button 2 with icon stop giving up after 15)
if temp is "Beenden" then
return false
else
return true
end if
end errMe
--
on quitIt(x)
if x then
return false
else
return true
end if
end quitIt
--
on displayMess()
activate me
set temp to button returned of (display dialog "Achtung! Jede Datei im ausgewählten Ordner wird gelöscht!!" & cr2 & "Wollen Sie das wirklich?" buttons {"Ja", "Nein"} default button 2 with icon caution)
if temp is "Ja" then
set temp to button returned of (display dialog "Letzte Chance!" & cr2 & "Wollen Sie wirklich alle Dateien des ausgewählten Ordners löschen?" & cr2 & "Das kann einige Minuten in Anspruch nehmen. Solange der Cursor \"zappt\" läuft der Vorgang nochÖ" buttons {"Ja", "Nein"} default button 2 with icon stop)
if temp is "Nein" then
return false
else
return true
end if
else
return false
end if
end displayMess
--
on UserMessage(icn, msg1, msg2, btn1, btn2)
return true
activate me
try
dd install with fonts [{name:"Charcoal", size:12, style:plain}, {name:"Geneva", size:10, style:plain}] with grayscale
set dlog to dd make dialog {name:"macgix FolderWalker 1.0", size:[320, 50], style:standard palette, contents:[¨
{class:icon, bounds:[17, 9, 17 + 32, 9 + 32], contents:icn}, ¨
{class:static text, bounds:[67, 19, 352, 19 + 26], contents:msg1, font:{name:"Geneva", size:9, style:bold}} ¨
]}
on error
display dialog "Das Ende des Vorgangs wird bestätigt, haben Sie nun etwas Geduld!" buttons {"OK"} default button 1 with icon note
end try
end UserMessage
--
on ProgrammError(errtext, errnum)
if errnum is -128 then
if my quitIt(true) is false then return false
else
activate me
set theNewStringList to (("Nummer: " & errnum & " _ " & "Text: " & errtext) as text)
try
my ErrorMessage(0, "Ein Fehler ist aufgetreten: ", ("Nummer: " & errnum & return & return & errtext as text), "Beenden", "")
on error
display dialog theNewStringList buttons {"Beenden"} default button 1 with icon stop
end try
tell application (path to frontmost application as text)
activate
try
set the clipboard to theNewStringList
end try
end tell
try
my quitIt(true)
end try
return
end if
end ProgrammError
--

-- - Skripende

Good Luck!

Thomas

Falls das Skript unbrauchbar dargestellt worden sein sollte, bitte ich um eine kurze eMail. Ich sende es dann als kompiliertes Skript im Attachment des Replies zurück.
_________________
[macgix]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 09.04.2001 - 07:26    Titel: Dateinamen einlesen Antworten mit Zitat

Ich habe ein ähnliches Performance-Problem: Ich möchte allen Dateien eines bestimmten Ordners einen Namenszusatz hinzufügen. Bisher habe ich das über eine Datei-Schleife erledigt, indem ich die Dateianzahl aus einer count-Anweisung übergebe und dann eine Schleife von 1 to countende durchlaufe. Leider geht auch dieses Script extrem gemächlich zur Sache. Kann ich nicht auf einen Schlag sämlichen Dateien eines bestimmten Ordners einen String im Namen hinzufügen, so dass die Sache schneller abläuft?

Danke schön im Voraus!

(Geändert von iScript am 7:28 Uhr am 9 April 2001)
_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
scripter
•->
•->


Anmeldedatum: 23.03.2001
Beiträge: 3

BeitragVerfasst am: 09.04.2001 - 16:35    Titel: Dateinamen einlesen Antworten mit Zitat

Hallo macgix, hallo iScript,

ich bin untreu geworden und verwende jetzt Excel und VBA (Filename mit DIR auslesen und in eine Tabelle schreiben).
Laufzeit ca. 10 min. für ca.23.000 Dateien.

Das Script von macgix habe ich dennoch in den Scripteditor geladen, man will ja noch etwas dazulernen.
Allerdings habe ich einige Fragen:

1. "!=" erzeugt bei mir eine Fehlermeldung. Ich habe es durch "is not equal to" ersetzt. Ist das korrekt?
2. "dd install"; "dd uninstall"; "dd make dialog" sind unbekannt. Welches Programm muss installiert sein um die Funktionen verfügbar zu machen?

Wenn ich das Script richtig verstanden habe löst es mein Problem (OUT of Memory Error) nicht. Es befinden sich über 23.000 Dateien in EINEM Ordner. Es bestehen leider keine Unterordner. Eine Umstrukturierung hätte erheblichen Aufwand in anderen Scripten zur Folge. Ich habe auch schon mit "contains" versucht die Datenmenge einzugrenzen und eine Struktur nachzubilden, aber ohne Erfolg. Auch hier erhalte ich einen OUT of Memory Error.

Trotzdem vielen Dank für Eure Bemühungen!!

Scripter
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1946
Wohnort: Deiningen

BeitragVerfasst am: 09.04.2001 - 19:41    Titel: Dateinamen einlesen Antworten mit Zitat

"dd install"; "dd uninstall"; "dd make dialog" entstammen der Scripting Addition "Dialog Director", die es ermöglicht, Script auch mit komplexeren Dialog-Fenstern zu vesehen.
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-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