Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Wer hat Ahnung von AutoIt...?

NoStI_Script / 7 Antworten / Baumansicht Nickles

Ich hab ein kleines Problem.
ich muss 1700 Ascidatein auslesen und in eine Datei einfügen.
( Aus 1700 Dateien will ich eine Datei machen )
Da VBS den Prozesoor sehr stark beansprucht, habe ich mich für die Robot-Script-Sprache AutoIt entschieden.
Es funzt auch alles so, wie es soll, bis auf das, die Datein die ausgelesen werden sollen, unterschiedlich groß sind. (von 10kb bis zu 50MB) Dadurch gibt es probleme mit der Sleep funktion. Je größer die auszulesende Datei ist, desto höher muss der Wert der Sleep Funktion sein. Jetz hab ich aber absolut keine Lust, die Sleep funktion jedesmal manuel hoch- bzw. runter-zusetzen.
Wie kriege ich es hin, das AutoIt die Größe der Datei erkennt, und ich dann eine aufgeteilte Schleife basteln kann, das je nach größe der Datei ein anderer Sleep-Wert verwendet wird...?

Hier mal das listing des Scriptes:



Sleep,2000

SetEnv, iniPath, %A_WORKINGDIR%\\\\read.ini
IniRead, startfile, %iniPath%, All, file
IniWrite,startfile,%inipath%,all,file
SetEnv,edit,notepad

InputBox,name,Mengenangabe,Bitte die Menge der Daten angeben die Ausgelesen werden sollen.

SetEnv,mass,%name%

SetEnv,file,0

main:

Run,%edit%

Sleep,100
Send,^o
WinGetActiveTitle,Untitled - Notepad
Sleep,100
Send,{TAB}
Sleep,100
Send,{DOWN 2}
Sleep,100
Send,{TAB 7}
Sleep,100
Send,^{HOME}{DOWN %file%}{UP}{ENTER}

; counter+1
EnvAdd,file,1

IfEqual,file,%mass%, Goto,msg

WinActivate,Untitled - Notepad

Sleep,100
Send,^a
Sleep,100
Send,^c
Sleep,100
Send, !{F4}

Sleep,100

Run,%edit%

Sleep,100
Send,^o
WinGetActiveTitle,Untitled - Notepad
Sleep,100
Send,Output.txt{ENTER}
Sleep,100
WinActivate,Untitled - Notepad
Send,^{END}
Sleep,10
Send,{ENTER}
Sleep,100
Send,^v
Sleep,100
Send,^s
Sleep,100
Send, !{F4}

Goto,main

Exit:
Exit

msg:
MsgBox,0,Vorgang beendet,Der Vorgang wurde beendet. Es wurden %file% Dateien erfolgreich ausgelesen.
Goto,Exit

bei Antwort benachrichtigen
Borlander NoStI_Script „Wer hat Ahnung von AutoIt...?“
Optionen
10kb bis zu 50MB
Wähle doch einefach eine Zeit die auch für die 50MB Datei reicht. Dann dauert die Ausführung allerdings länger. Wenn Du das nur einmalig

machen willst, dann stört dass nicht umbedingt. Willst Du das ganze öfter machen solltest Du lieber ein kompiliertes Programm einsetzen,

dass ist grundsätzlich schneller als ein laufzeitinterpretiertes Script. Das Zusammenführen mit Notepad bringt vermutlich auch nicht gerade den Geschwindigkeitsrausch.

CU Borlander
bei Antwort benachrichtigen
Kolti NoStI_Script „Wer hat Ahnung von AutoIt...?“
Optionen

Aus 1700 ASCII-Dateien eine einzge zu machen ist mit dem XCOPY-Befehl unter DOS am einfachsten.
Voraussetzung ist, daß alle Dateien in einem Verzeichnis sind:

Xcopy *.* d:\Große.Datei
Dabei muß die neue Dtei in einem anderen Verzeichnis liegen, da sie sonst versucht, sich selbst zu kop

bei Antwort benachrichtigen
Borlander Kolti „Aus 1700 ASCII-Dateien eine einzge zu machen ist mit dem XCOPY-Befehl unter DOS...“
Optionen

Die Zieldatei wird dann allerdings bei jedem Kopiervorgang überschrieben, so dass sie am Ende gleich der letzen kopierten Datei ist. Funktioniert so leider nicht.

CU Borlander

bei Antwort benachrichtigen
Kolti Borlander „Die Zieldatei wird dann allerdings bei jedem Kopiervorgang überschrieben, so...“
Optionen

@ Borlander.

Ja, Du hast ja Recht.
Dazu muß man nicht den XCOPY-, sondern den COPY-Befehl nehmen.
Tut mir leid, aber ich mache das nicht täglich.

..... aber, hätte man da nicht drauf rumdenken können???????

bei Antwort benachrichtigen
the_mic Kolti „@ Borlander. Ja, Du hast ja Recht. Dazu muß man nicht den XCOPY-, sondern den...“
Optionen

hm, nein, die syntax um mit dem copy-befehl dateien zusammenzuführen lautet afaik:
copy datei1.ext + datei2.ext zieldatei.ext
das dann aber eben 1700 mal. hmmmmm, nicht grad so berauschende aussicht.

cat /dev/brain > /dev/null
bei Antwort benachrichtigen
Borlander the_mic „andere syntax“
Optionen

Mit dem FOR-Befehl sollte das eigentlich gehen. Ich habe den entsprechenden Syntax jetzt allerdings nicht im Kopf, den muss ich Morgen mal nachschlagen.

Sollten dann vom Prinzip her so laufen:
FOR [...] copy %1 + zieldatei.ext zieldatei.ext

Die Zieldatei müsste in dem Fall schon vorher als leere Datei angelegt werden.

CU Borlander

bei Antwort benachrichtigen
Borlander Nachtrag zu: „Zusammenkopieren mit FOR & COPY“
Optionen

Am besten das Ganze in ein Batchdatei setzen:

zcopy.bat
FOR %%file IN (*.ext) DO COPY %%file + zieldatei.ext zieldatei.ext

Borlander

bei Antwort benachrichtigen