Hallo Hüpfer,
man kann auch etwas mit nichts ersetzen => überfüssiges ist gelöscht,
mfg (Auto)Bert
Hallo Hüpfer,
man kann auch etwas mit nichts ersetzen => überfüssiges ist gelöscht,
mfg (Auto)Bert
Hallo Hüpfer,
mit der Funktion StringReplace kannst du unerwünschte Zeichen aus einem String entfernen, schau dir doch dazu die Hilfe an,
mfg (Auto)Bert
Hallo Oscar,
konnte ich mir bis jetzt gar nicht vorstellen, dass es ein Thema gibt bei dem du passen musst. Dein Listviewdatenbankbeispiel ist Spitze (wie alles von dir), war das 1. Skript zu Listview das ich mir eausgesucht habe um anhand dessen die Möglichkeiten des Listviews unter AutoIt zu testen.
In den Wettbewerb mit dir zu treten finde ich nicht besonders toll, denn da hat man eigentlich schon verloren. Deine Begründung für 2 unabhängige Lösungen sehe ich aber ein, denn auch ich weiss das viele Wege zum Ziel führen.
mfg (Auto)Bert
Hallo Henry,
nach dem sich immer noch kein Spezialist für reguläre Ausdrücke gefunden hat, da ist sowas ein Einzeiler, aber ich hab da noch kA
naocheinmal StringSplit jetzt für #4,
;#include <Array.au3>
$adatum = StringSplit("Gestern war Sonntag. - Heute ist Montag, 20:45 Uhr" , "- ",1)
;_ArrayDisplay($aDatum,"2 Teile ewartet")
$adatum = StringSplit($aDatum[2],",")
;_ArrayDisplay($aDatum,"2 Teile ewartet")
$aDatum = StringSplit($aDatum[1]," ")
;_ArrayDisplay($aDatum,"2 Teile ewartet")
MsgBox(0,"Heute ist ",$aDatum[3])
wenn du alle Semikolons entfernst, verstehst du die Art und Weise besser warum ich ein bestimmtes Feld einsetze,
mfg (Auto)Bert
Hallo Oscar ,
nein ich habe leider noch nicht angefangen, obwohl ich es mir füs Wochenende fest vorgenommen hatte. Das Problem mit dem Ressourcenhuger sehe ich eigentlich nicht, da dies ja kein Programm wird, dass alle 5 Minuten nachschauen muss, ich denke 1-2 mal die Stunde sollte reichen; zusätzlich auf manuelle Anforderung. Es ist meines Erachtens auch nicht dafür vorgesehen, jedes Verzeichnis zu überwachen, dann könnte man ja gleich die Root-Partition nehmen. Ich hatte dies in einer Memory-SQLite abzuspeichern. (hierzu hab ich seit der 1. Woche einen >Codeschnipsel von AutoItScript, hab ihn aber damals nicht zum laufen gebracht)
;Func WriteMemDb2File(ByRef $objMemDbConn, ByRef $objFileDbConn, $strDbFileName) ;from JorgeW
; $strResult = _SQLite_Exec($objMemDbConn, "ATTACH DATABASE '" & $strDbFileName & "' AS FileDb;")
; $strResult = _SQLite_Exec($objMemDbConn, "INSERT INTO FileDb.File_Elements SELECT * FROM File_Elements;")
; $strResult = _SQLite_Exec($objMemDbConn, "INSERT INTO FileDb.Raw_File SELECT * FROM Raw_File;")
; $strResult = _SQLite_Exec($objMemDbConn, "DETACH DATABASE FileDb;")
; Return 1
;EndFunc;
Diese Memory-DB soll wenn das restliche Sys´tem unter einer definierten Last ist dann nach und nach die eigentliche DB füllt (so zumindest die Idealvorstellung), also ein Programm das selbst schaut wann gerade nichts los ist und dann wieder Halb-Dreiviertelgas gibt. Aber für diesen Bereich (wie kriegt man mit wann wieviel los ist), habe ich noch keinerlei Routinen gesichtet. Ich weiss nur das das Füllen einer DB von 25 MB Plattenplaltz durch Kompression auf 5 MB geschrumpft, bei mir 171.707 ms dauert, von den beiden mir angezeigten Kern(chen) arbeitet einer bei ca. 75 %, der andere bei 25 %.
Für den Aufbau der Wartungsgui (bzw. Demo-Anwendung für die UDF-Funktionen) hatte ich an eine Art Doppelten-Explorer gedacht (horizontal geteilt, 1 Hälfte für die zu beobachtenden Ordner (diese aus DB bzw. in DB) und die andere Hälfte alle Ordner. Linkes Drittel jeweils 1 Treeview und rechts eine Listview. Doppelte Einträge für ein und dieselbe Datei kann es nicht geben (HighLander-Prinzip).
Wie man die Regeln aufstellt wenn der Elter etwas anders soll, (will oder möchte) als das Kind müsste man festlegen, nicht dass "bei der Diskussion der beiden" eine Endlosschleife entsteht. Ich würde hierzu vorschlagen grundsätzlich für alle Kinder und Kindeskinder die Regeln zu vererben und im Einzelfall davon abzusehen, das heist wenn im Verzeichnis Spoilerreader grundsätzlich die Dateien 4 Wochen nach dem Einstellen bzw. letztem Zugriff gelöscht werden sollen, dann wird jede einzelne Datei selektiert oder auch nicht, das hört sich aber schlimmer an als es ist 1 SQL-Befehl sollte genügen: Delete from Ordner where oID = 4711 and Ablauf <=20090605 (Auf die Uhrzeit würde ich verzichten). Aber zu SQL-Befehlen kann ich dir ja nichts neues erzählen. Das lustige an der ganzen Sache ist das sogenannte DropTarget hab ich dank Progandy auch schon, überhaupt wird das ein Projekt mit sehr vielen bisher unwissenden MitVorarbeitern.
Dummerweise kann ich noch nichts vorweisen, ich muss mir mal 2 Tage Abstinenz vom Board verordnen, da findet sich nämlich immer ein Thema dass mich interessiert und von meinen Vorhaben abbringt,
mfg (Auto)Bert
Hallo Destruction13,
lies dir mal die Forenregeln genau durch, dann wirst du verstehen, dass deine Bitte hier auf taube Ohren stösst.
mfg (Auto)Bert
Hallo Skytandem,
haben eure CSV-Files wirklich nur 2 Zeilen, die Lösung die ich in #11 gepostet (im Spoiler) habe geht auch für große Dateien, aber Hauptsache du hast es geschafft,
mfg (Auto)Bert
Hallo blackdeath911,
Nimm doch einfach die Func FileGetSize('DeinInstallerFileName') um den jeweiligen Plattenplatz zu ermitteln:
While 1
$msg = GUIGetMsg()
Switch $msg
Case -3
Exit
Case $exit
Exit
Case $ok
$iZuBelegen = 0
If GUICtrlRead($1) = $GUI_CHECKED Then
GUICtrlSetData($1Stat,"Wird installiert ICQ 6.5")
$iZuBelegen = $iZuBelegen + FileGetSize(ISQ65.Exe)
;hier Insatllationsroutine aufrufen runwait
sleep (3000)
GUICtrlSetData($1Stat,"wurde installiert ICQ 6.5")
EndIf
If GUICtrlRead($2) = $GUI_CHECKED Then
GUICtrlSetData($2Stat,"Wird installiert FireFox")
$iZuBelegen = $iZuBelegen + FileGetSize(FireFox.Exe)
;hier Insatllationsroutine aufrufen
sleep (3000)
GUICtrlSetData($2Stat,"wurde installier FireFox")
EndIf
If GUICtrlRead($3) = $GUI_CHECKED Then
GUICtrlSetData($3Stat,"Wird installiert DivX")
$iZuBelegen = $iZuBelegen + FileGetSize(DivX.Exe)
;hier Insatllationsroutine aufrufen
sleep (3000)
GUICtrlSetData($3Stat,"wurde installiert DivX")
EndIf
If GUICtrlRead($4) = $GUI_CHECKED Then
GUICtrlSetData($4Stat,"Wird installiert JAVA")
$iZuBelegen = $iZuBelegen + FileGetSize(JAVA.Exe)
;hier Insatllationsroutine aufrufen
sleep (3000)
GUICtrlSetData($4Stat,"wurde installiert JAVA")
EndIf
GUIDelete($hGui)
EXitLoop
EndSwitch
WEnd
EndFunc
ist noch aus dem alten Thread, da du ja sofort nach dem Drücken auf den Fertig-Button anfängst brauchst du immer nur aufzu addieren, für eine evtl. ProgressAnzeige merkst du dir am Anfang wieviel Platz auf der Platte frei war, danach schaust du immer wieder wieviel noch frei ist, die Differenz ist der absolute Wert des Fortschritts, diesen rechnest du dann mit Hilfe des insgsamt benötigten Platzbedarfs in eine %-Zahl um und gibst sie aus z.B. Label (oder auch anders wenn du möchtest),
mfg (Auto)Bert
Hallo SkyTandem,
neuer Stand (nicht erschrecken sieht etwas anders aus, macht aber meines Erachtens nach das was du willst. Für jede Datenzeile in der CSV soll eine Datei erstellt werden. Die Ueberschriftenzeile hab ich in $aUeber als Array aufgehoben. Die Feld-Nr. beginnen jeweils bei 1 und enden bei 60.
#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]#include<array.au3>
#include<String.au3>
$hFileIn = FileOpen("input.csv",0)
$complete = FileRead($hFileIn)
;ganze Datei einlesen
FileClose($hFileIn)
$aLines = StringSplit(StringReplace($complete,@crlf,"|"),"|")
;in Zeilen aufsplitten und in Array speichern
_arrayDisplay($aLines) ;nur zur kontrolle auskommentieren
for $i = 1 to $aLines[0]-1
$aFelder = StringSplit($alines[$i],";")
;in Felder aufsplitten und in Array
if $i =1 then
$aUeber = $afelder
;ueberschrift aufheben (wer weiss wozu sie noch gebraucht wird)
_arrayDisplay($aUeber) ;nur zur kontrolle auskommentieren
Else
_arrayDisplay($aFelder);nur zur kontrolle auskommentieren
$sFile= _gueltigerDateiname($afelder[2])
$hFileOut=FileOpen($sFile,2)
FileWrite($hFileOut,$afelder[1])
FileClose($hFileOut)
EndIf
Next
Func _gueltigerDateiname($sFN)
;hier müssen alle Zeichen entweder ganz entfernt oder mit gültigen z.b.Leerstellen ersetzt werden
Return StringReplace($sFN,":","")
EndFunc
Der größte Fehler war der falsche Open Parameter (den ich auch übersehen habe). Die Zeilen mit _ArrayDisplay kannst du auskommentieren wenn du fertig bist, sie dienten mir nur zur Kontrolle, das Grundgerüst steht andere nevtl. noch anzuhängende Daten must du mit dem Verkettenoperator & hinzufügen.
mfg (Auto)Bert
Hallo Skytandem,
beantworte bitte meine Frage aus meinem letzten Post,
Alina Skript hatte definitiv mind. 1 Fehler
[autoit]dim $complete
dim $felder
#include<array.au3>
#include<String.au3>
$hFileIn = FileOpen("input.csv",1)
$complete=FileRead($hFileIn)
$felder = StringSplit($complete,";") ;vor Stringsplit war ein _
ConsoleWrite($felder[62] & @CRLF) ;zum überprüfen ob alle Zeichen gültig sind, Ausgabe in die Console von Scite
FileClose($hFileIn)
$hFileOut=FileOpen($felder[62],2) ;hier war meiner
FileWrite($hFileOut,$felder[61])
FileClose($hFileOut)
das Schema pass aber von vorne bis hinten nicht zur Datei weil entweder ein ; oder SkyTandem hat die Überschrift die ja wenn es eine ist nicht eingelesen werden soll als Felder mitgezählt,
Edit: da folgendes Skript für beide Zeilen 60 ausgibt ist davon auszugehen, das die 1 Zeile überschrift ist,
[autoit]$1='"File";"Destination";"TimeStamp";"Ordnerwahl";"dateiname";"Belegart";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";""'
$n= Stringreplace($1,'"','')
msgbox(0,"Anzahl Felder Zeile1 =",@extended/2) ;2 " begrenzen ein Feld
$2='"test.pdf";"C:\scanziele\Buchhaltung\2009-05-17";"2009-05-17 20:10:07";"C:\scanziele\Buchhaltung";"test";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";""'
$i = Stringreplace($2,'"','')
msgbox(0,"Anzahl Felder Zeile2: =",@extended/2) ;2 " begrenzen ein Feld
@Skytandem welches Feld namemtlich oder per Wert (kein Abzählreim bitte) soll den Dateinamen ergeben? Sollen die Anführungszeichen mit in die Datei oder dürfen, können, müssen sie enternt werden?
links Inhalt der 1. Zeile = Überschrift rechts 1. Datenzeile (und einzigste)
mfg (Auto)Bert
Hallo SkyTandem,
häng die Datei (ruhig auch 2-5 Datensätze) als Anhang an, bin mir nicht sicher ob die Formatierung noch stimmt,
Edit: wenn ich noch 60 +2 abzählen kann dann soll dieser Feldinhalt "2009-05-17 20:10:07" den Dateinamen ergeben Doppelpunkte sind aber nicht gültig!
1. Hast du eine eigene _StringSplit-Funktion da die normale StringSplit heist, die normale gibt ohne zusätzlichen Parameter in $felder[0] die Anzahl der Felder aus?
2. nächste Frage ist Zeile 1 die Beschreibung der Daten und Zeile 2 eine Datenzeile.
mfg (Auto)Bert
Hallo K1773R,
stell es doch einfach im Forum Skripte ein sobald es fertig ist,
mfg (Auto)Bert
Hallo skytandem,
das Skript müsste eigentlich so ausschauen:
dim $complete
dim $felder
#include<array.au3>
#include<String.au3>
$hFileIn = FileOpen("input.csv",1)
$complete=FileRead($hFileIn)
$felder = _StringSplit($complete,";")
ConsoleWrite($felder[62] & @CRLF) ;zum überprüfen ob alle Zeichen gültig sind, Ausgabe in die Console von Scite
FileClose($hFileIn)
$hFileOut=FileOpen($hFileOut,2)
FileWrite($hFileOut,$felder[61])
FileClose($hFileOut)
die einzig wirklich wichtige Änderung ist das Close nach dem Einlesen und vor dem erneuten Öffnen zum Schreiben. Wenn das auch nicht funktioniert enthält $felder[62] ein ungüliges Zeichen, poste dann bitte die Consolenausgabe bis zum Abbruch und den Auszug aus der Textdatei,
mfg (Auto)Bert
Hallo K1773R,
ja hier must du nur anpassen, ist das Beispiel aus der Hilfe zu _ReplaceStringInFile
#include <File.au3>
[/autoit] [autoit][/autoit] [autoit]$find = "BEFORE"
$replace = "AFTER"
$filename = "C:\_ReplaceStringInFile.test"
[/autoit] [autoit][/autoit] [autoit]$msg = "Hello Test " & $find & " Hello Test" & @CRLF
$msg &= "Hello Test" & @CRLF
$msg &= @CRLF
$msg &= $find
FileWrite($filename, $msg )
msgbox(0,"BEFORE",$msg)
$retval = _ReplaceStringInFile($filename,$find,$replace)
if $retval = -1 then
msgbox(0, "ERROR", "The pattern could not be replaced in file: " & $filename & " Error: " & @error)
exit
else
msgbox(0, "INFO", "Found " & $retval & " occurances of the pattern: " & $find & " in the file: " & $filename)
endif
$msg = FileRead($filename, 1000)
msgbox(0,"AFTER",$msg)
FileDelete($filename)
mfg (Auto)Bert
Hallo Sayen,
schau doch mal in den Post #2, schau dir den Link dort an. Im dazugehörigen Demo-Skript für die Anwendung der UDF beginnt in Zeile 942 die Region Network Cards, ich denke das ist genau dass was du suchst, ich kann es aber nicht testen da ich kein Netzwerk installiert habe.
mfg (Auto)Bert
Hallo Oxx90,
da ich eine 20000 kbit/sleitung
Also einfach seine komplette geschwindigkeit auf z.B. 10000 kbit/s begrenzen und gut is!
= 10 MBit/s
Hat jetzt nichts mit AutoIt zu tun, aber schalte seine Netzwerkkarte einfach auf 10MBit/s.
Ja aber was bringt mir das wenn er dann nurnoch 10 Mbit/s hat wenn er damit unsere 2 Mbit/s Leitung immernoch genauso auslasten kann?
Oben sprachst du noch von 20.000 KBit /s.
Hast du oben jeweils eine 0 zuviel oder falsch umgerechnet?
mfg (Auto)Bert
Hallo chip,
das Risiko der Gleichzeitigkeit, ist relativ gering. Ob es einen Fehler auslöst weis ich nicht, du kannst aber den Fehler behandeln so das deine Programme nicht aussteigen. Idealerweise wartet das Programm mit der Fehlermeldung eine zufällige Zeitspanne und vesucht es dann noch einmal. Oder die SUBs legen immer neue INIs an und die Main löscht sie nach dem auslesen,
mfg (Auto)Bert
Hallo chip,
das einfachste wäre, deine Sub-EXEn schreiben ihren Status in ein Ini-File und die Main-EXE liest die INI in bestimmten Zeitspannen wieder aus und aktualisiert ihre eigene Status-Anzeige,
mfg (Auto)Bert