Ansonsten kannst du das "Workingdirectory" beim starten setzen. Das ist der Ordner, von dem das Programm gestartet werden soll, standartmäßig das Verzeichnis, in dem sich dein Programm befindet.
Run ( "program" [, "workingdir" [, show_flag [, opt_flag]]] )
Hier der 2te Parameter:
Run("C:\folder\programm.exe","C:\otherFolder\createFileHere")
Beiträge von Kanashius
-
-
Freut mich, dass du das Forum bereicherst
Je mehr Leute wir sind, die anderen helfen, desto schöner.
Ich bin auch (fast) nurnoch zum beantworten von Fragen und zum einstellen von eigenen Scripts hier.
Denke wir schreiben noch mal miteinander.MfG Kanashius
PS: Umso mehr witzige Namen, desto schönere Gerichte kann man mit den ganzen Usern hier zusammenbrauen
-
Ich hab grad kein RegEx (und auch keine Zeit eins zu schreiben), aber ich hab mal für ne Datenbank nen Trigger geschrieben, der Telefonnummern in nen Einheitliches Format bringen sollte.
(Getestet mit >5000000 Nummern, haben soweit ich weiß alle Funktioniert).
Vielleicht hilft es dir weiter:Spoiler anzeigen
Code
Alles anzeigenCREATE OR REPLACE FUNCTION KW.telefonnummerfiltern ( struebergabenummer VARCHAR ) RETURN VARCHAR IS strfertigenummer VARCHAR (32); stranfangsnummer VARCHAR (32); instrabfrageergebnis NUMBER; stringlaenge NUMBER; strzwischenstring VARCHAR (32); strzwischenstring2 VARCHAR (32); /****************************************************************************** NAME: telefonnummerfiltern PURPOSE: REVISIONS: Ver Date Author Description --------- ---------- --------------- ------------------------------------ 1.0 27.08.2012 Kanashius Filtern der Telefonnummer zur Einheitlichen abildung (+49 vorwahl Nummer) NOTES: Automatically available Auto Replace Keywords: Object Name: telefonnummerfiltern Sysdate: 27.08.2012 Date and Time: 27.08.2012, 12:19:30, and 27.08.2012 12:19:30 Username: (set in TOAD Options, Procedure Editor) Table Name: (set in the "New PL/SQL Object" dialog) ******************************************************************************/ BEGIN stranfangsnummer := struebergabenummer; stringlaenge := LENGTH (stranfangsnummer); /* Prüfen: ist ein "/" oder "-" enthalten, wenn nicht wird der Wert direkt zurückgegeben*/ IF INSTR (stranfangsnummer, '/') = 0 AND INSTR (stranfangsnummer, '-') = 0 THEN strfertigenummer:=stranfangsnummer; if length(strfertigenummer)>25 then return stranfangsnummer; else /*löschen der überflüssigen leerzeichen, falls mehr als eins hintereinander steht* instrabfrageergebnis:=instr(strfertigenummer,' '); while instrabfrageergebnis!=0 Loop while instrabfrageergebnis+1=instr(strfertigenummer,' ',instrabfrageergebnis) Loop stranfangsnummer:=substr(strfertigenummer,0,instrabfrageergebnis); strzwischenstring:=substr(strfertigenummer,instrabfrageergebnis+1,1); strzwischenstring2:=substr(strfertigenummer,instrabfrageergebnis+2); strfertigenummer:=stranfangsnummer||strzwischenstring2; End Loop; instrabfrageergebnis:=instr(strfertigenummer,' ',instrabfrageergebnis+1); End Loop;*/ RETURN strfertigenummer; end if; ELSE /*Prüfung: Ist die Telefonnummer länger als 5 Zeichen? Wenn nicht wird die Nummer so zurückgegeben (s.unten)*/ IF stringlaenge > 5 THEN /*Prüfung: Hat die Nummer schon das korrekte Format? ( Prüft ob "+" vorkommt und "-" oder "/" nicht vorkommt) Wenn dem so ist wird die Nummer so zurückgegeben.*/ IF INSTR (stranfangsnummer, '+') != 0 AND INSTR (stranfangsnummer, '/') = 0 OR INSTR (stranfangsnummer, '+') != 0 AND INSTR (stranfangsnummer, '-') = 0 THEN if length(strfertigenummer)>25 then return stranfangsnummer; else /*löschen der überflüssigen Leerzeichen, falls mehr als eins hintereinander steht* instrabfrageergebnis:=instr(strfertigenummer,' '); while instrabfrageergebnis!=0 Loop while instrabfrageergebnis+1=instr(strfertigenummer,' ',instrabfrageergebnis) Loop stranfangsnummer:=substr(strfertigenummer,0,instrabfrageergebnis); strzwischenstring:=substr(strfertigenummer,instrabfrageergebnis+1,1); strzwischenstring2:=substr(strfertigenummer,instrabfrageergebnis+2); strfertigenummer:=stranfangsnummer||strzwischenstring2; End Loop; instrabfrageergebnis:=instr(strfertigenummer,' ',instrabfrageergebnis+1); End Loop;*/ RETURN strfertigenummer; end if; ELSE if instr(stranfangsnummer,'+')=0 and instr(stranfangsnummer,'4')=1 and instr(stranfangsnummer,'9')=2 then return stranfangsnummer; else /*löschen der überflüssigen Leerzeichen, falls mehr als eins hintereinander steht*/ stranfangsnummer:=replace(stranfangsnummer,' '); /*"0" wird durch "+49" ersetzt, wenn "+" nicht vorkommt*/ IF INSTR (stranfangsnummer, '+') = 0 THEN instrabfrageergebnis := INSTR (stranfangsnummer, '0'); strzwischenstring := SUBSTR (stranfangsnummer, instrabfrageergebnis + 1); strfertigenummer := '+49 '; END IF; instrabfrageergebnis := INSTR (strzwischenstring, '/'); IF instrabfrageergebnis = 0 THEN /* Das erste "-" wird durch " " ersetzt*/ instrabfrageergebnis := INSTR (strzwischenstring, '-'); strzwischenstring2 := SUBSTR (strzwischenstring, instrabfrageergebnis + 1); strzwischenstring := SUBSTR (strzwischenstring, 1, instrabfrageergebnis); strzwischenstring := REPLACE (strzwischenstring, '-', ' '); strfertigenummer := strfertigenummer || strzwischenstring; ELSE /* Das erste "/" wird durch " " ersetzt*/ instrabfrageergebnis := INSTR (strzwischenstring, '/'); strzwischenstring2 := SUBSTR (strzwischenstring, instrabfrageergebnis + 1); strzwischenstring := SUBSTR (strzwischenstring, 1, instrabfrageergebnis); strzwischenstring := REPLACE (strzwischenstring, '/', ' '); strfertigenummer := strfertigenummer || strzwischenstring; END IF; /* Wenn "/" oder "-" nochmal vorkommt wird dies durch " " ersetzt!*/ IF INSTR (stranfangsnummer, '/') != 0 OR INSTR (stranfangsnummer, '-') != 0 THEN strfertigenummer := strfertigenummer || TRANSLATE (strzwischenstring2, '/-', ' '); END IF; if length(strfertigenummer)>25 then /*löschen der überflüssigen Leerzeichen, falls mehr als eins hintereinander steht* instrabfrageergebnis:=instr(strfertigenummer,' '); while instrabfrageergebnis!=0 Loop while instrabfrageergebnis+1=instr(strfertigenummer,' ',instrabfrageergebnis) Loop stranfangsnummer:=substr(strfertigenummer,0,instrabfrageergebnis); strzwischenstring:=substr(strfertigenummer,instrabfrageergebnis+1,1); strzwischenstring2:=substr(strfertigenummer,instrabfrageergebnis+2); strfertigenummer:=stranfangsnummer||strzwischenstring2; End Loop; instrabfrageergebnis:=instr(strfertigenummer,' ',instrabfrageergebnis+1); End Loop;*/ return stranfangsnummer; else /*löschen der überflüssigen Leerzeichen, falls mehr als eins hintereinander steht* instrabfrageergebnis:=instr(strfertigenummer,' '); while instrabfrageergebnis!=0 Loop while instrabfrageergebnis+1=instr(strfertigenummer,' ',instrabfrageergebnis) Loop stranfangsnummer:=substr(strfertigenummer,0,instrabfrageergebnis); strzwischenstring:=substr(strfertigenummer,instrabfrageergebnis+1,1); strzwischenstring2:=substr(strfertigenummer,instrabfrageergebnis+2); strfertigenummer:=stranfangsnummer||strzwischenstring2; End Loop; instrabfrageergebnis:=instr(strfertigenummer,' ',instrabfrageergebnis+1); End Loop;*/ RETURN strfertigenummer; end if; END IF; End if; ELSE strfertigenummer := stranfangsnummer; if length(strfertigenummer)>25 then return stranfangsnummer; else /*löschen der überflüssigen Leerzeichen, falls mehr als eins hintereinander steht* instrabfrageergebnis:=instr(strfertigenummer,' '); while instrabfrageergebnis!=0 Loop while instrabfrageergebnis+1=instr(strfertigenummer,' ',instrabfrageergebnis) Loop stranfangsnummer:=substr(strfertigenummer,0,instrabfrageergebnis); strzwischenstring:=substr(strfertigenummer,instrabfrageergebnis+1,1); strzwischenstring2:=substr(strfertigenummer,instrabfrageergebnis+2); strfertigenummer:=stranfangsnummer||strzwischenstring2; End Loop; instrabfrageergebnis:=instr(strfertigenummer,' ',instrabfrageergebnis+1); End Loop;*/ RETURN strfertigenummer; end if; END IF; END IF; END telefonnummerfiltern; /
-
-
-
-
Habs mal umgeschrieben. Das Problem war, dass _FileListToArray ein Array mit Dateien zurückgibt. Du hast so getan, als würde dort eine Datei zurückgegeben werden. Datei und Liste mit Dateien ist halt was anderes
AutoIt
Alles anzeigen#include <Array.au3> #include <File.au3> #include <String.au3> $arFiles=_getFiles("C:\Users\drecunion\Desktop\Dropshipping\Skripte\lieferscheine\") if @error then MsgBox(16,"Error","Folder not found!") exit endif if @extended=1 then MsgBox(16,"Error","No Files found!") exit endif $sFailed=_saveDataToFiles($arFiles,"C:\Users\drecunion\Desktop\Dropshipping\Skripte\lieferscheindörns\") if $sFailed<>"" then MsgBox(16,"Error","Failed Files: "&@crlf&@crlf&$sFailed) endif Func _getFiles($path,$rec=false) local $arFiles[0] if $rec then $arFiles=_FileListToArrayRec($path,"*",1,1) else $arFiles=_FileListToArrayRec($path,"*",1,0) endif ;wrong path -> setError to 1 If @error = 1 Then SetError(1,0,$arFiles) EndIf ;no files found -> setExtended to 1 If @error = 4 Then SetError(0,1,$arFiles) EndIf local $arOnlyFiles[UBound($arFiles)-1] for $i=0 to UBound($arOnlyFiles)-1 step 1 $arOnlyFiles[$i]=$arFiles[$i+1] next return $arOnlyFiles EndFunc Func _saveDataToFiles($arFiles,$folder) local $sFailedFiles="" for $i=0 to UBound($arFiles)-1 step 1 If FileExists($arFiles[$i]) Then local $sBestellNummer="?",$sTrackingNummer="?" $sData=FileRead($arFiles[$i]) $arBestellNummer = _StringBetween($arFiles[$i],'<PurchaseOrderNumber>' , '</PurchaseOrderNumber>') $arTrackingNummer = _StringBetween($arFiles[$i],'<TrackingID>','</TrackingID>') if UBound($arBestellNummer)<1 then $sBestellNummer=$arBestellNummer[0] endif if UBound($arTrackingNummer)<1 then $sTrackingNummer=$arTrackingNummer[0] endif FileWrite($folder& $sBestellNummer & ".csv", "Bestellnummer" & ";" & "TrackingID" & @CRLF & $sBestellNummer & ";" & $sTrackingNummer) Else $sFailedFiles&=($sFailedFiles<>""?@crlf:"")&$arFiles[$i] EndIf next return $sFailedFiles EndFunc
Bei dieser Liste greift man mit $array[NUMMER] auf die Inhalte zu, mit UBound($array) bekommt man die Anzahl der Einträge
(Einträge fangen bei 0 an, nicht bei 1).MfG Kanashius
EDIT: String include hinzugefügt, $arFiles[$i] korrigiert
-
Naja, wenn das dein Ziel ist würde ich empfehlen, mit PHP zu arbeiten. Damit kann man inhalte aus anderen Dateien in den Quellcode einarbeiten,... Auf meiner Website hab ich es Beispielsweise so gemacht.
Jeder Seiteninhalt wird als datei gespeichert und bekommt eine id.
Es gibt eine Datei, in der titel, kurzinfo,... zu jeder id stehen.
Es gibt eine datei, in der die navigation definiert wird (mit den ids, über die dann titel,... automatisch eingebunden werden)
So müsstest du später nur eine Datei erstellen, die wird dann dort eingebunden.
Ist jetzt ein Verfahren, wie man so etwas normal machen würde...
(Wobei normal Datenbanken für sowas genutzt werden)Immer den Quellcode zu bearbeiten ist da so eigentlich auch nicht gedacht...
Also, speicher das in nem eigenen Format ab, das du mit PHP auswertest und ins HTML einfügst, so kann leicht editiert werden und Inhalte hinzuzufügen ist dann auch kein Problem.
So wie du es jetzt machst können schnell Probleme auftreten, wenn z.b. irgendwo in der Websites dinge mehrmals auftreten, uvm.Wenn du dabei Hilfe brauchst/Infos möchtest kannst du mich auch gerne mit PM anschreiben. Passt ja nicht mehr so ganz zu dem Problem des Threads hier.
MfG Kanashius
-
Was ist eigentlich der Sinn des ganzen? Willst du automatisiert websites mit dem script durchlaufen und ersetzen lassen, oder was soll das werden?
Wenn ich wüsste, was das Ziel des ganzen ist, könnte ich dir denke ich besser helfen.Am einfachsten wäre es vermutlich, die ganze HTML-Datei per AutoIt zu erstellen, statt teile zu bearbeiten.
-
Die Deutsch Hilfe, einfach nach IE durchsuchen, dann kommst du zu den _IE-Befehlen, dort sind Beispiele.
Also:
Einbinden musst du den kram garnicht, denn den wollen wir damit wegbekommen. Das ist nämlich sehr unsicherer Code. Eine Mausbewegung kann schon alles durcheinanderbringen. -
Sieh dir mal die Hilfe an, dort unter User defined Functions guck mal nach GuiCtrlListview (_GuiCtrlListview_...), damit kann man Zeilen hinzufügen, löschen, auslesen und auch die Spaltenbreite festlegen (schöner als mit Messagecodes (_GuiCtrlListview_setColumnWidth) )
Dann findest du dort auch die Funktion _FileReadToArray, welche für dich recht nützlich sein dürfte:Code$arFile=_FileReadToArray($sFile) For $i = 1 To UBound($arFile)-1 $tmp = StringReplace($arFile[$i], ";", "|") GUICtrlCreateListViewItem($tmp, $ListView1) Next
Zum Editieren hab ich mal eine UDF geschreiben, die kannst du dir dazu mal näher ansehen. Mit der UDF kannst du Spalten,Zeilen Editierbar machen: Listview edit subitems UDFKoda empfehle ich eher nicht. Koda ist nur sinnvoll wenn man absolut keine Ahnung hat, der Thread ersteller hat es aber ja schon hinbekommen, das Grundgerüst aufzustellen. Von daher Rate ich von Koda ab. Es verleitet einfach dazu sinnlose Variablenamen zu benutzen, und wenn man die Pixel sebst angibt ist es meist auch schöner. Die details muss man eh von Hand machen. Gerade die Verwendung von Arrays für Controls ist sehr schön, und viele kommen durch Koda garnicht darauf, so Controls zu erstellen. Also, sofern man es hinbekommt sollte man kein Koda verwenden.
Gerade wenn man später die Gui-Größe ändern will ist das mit Koda schlecht.
Wenn mans selbst macht, würde ich immer relative positionen und größen nehmen (also mit ner GuiWidth,GuiHeight arbeiten und die Controls damit positionieren. Später kann man dann auch eine Resizefunktion so leicht erstellen.
Beispiel (Bin nicht auf Windows, deshalb können noch kleine Syntaxfehler,... drin sein):Spoiler anzeigen
AutoIt
Alles anzeigen#include <GUIConstants.au3> Opt("GUIOnEventMode", 1) global $GuiMenubarHeight=16,$MainGuiWidth=800,$MainGuiHeight=400,$MainGui,$MainGui_Listview $MainGui=GuiCreate("TITEL",$MainGuiWidth,$MainGuiHeight,-1,-1,$WS_SIZEBOX) $MainGui_Listview=GuiCtrlCreateListview("Spalte1|Spalte2",5,5,$MainGuiWidth-10,$MainGuiHeight-$GuiMenubarHeight-35) $MainGui_Button=GuiCtrlCreateButton("Neue Zeile hinzufügen",5,$MainGuiHeight-$GuiMenubarHeight-30,$MainGuiWidth-10,25) GuiSetOnEvent($GUI_EVENT_RESIZED,"_resize") GuiSetState(@SW_SHOW,$MainGui) While sleep(10) WEnd Func _resize() $WinPos=WinGetPos($MainGui) $MainGuiWidth=$WinPos[2] $MainGuiHeight=$WinPos[3] GuiControlSetPos($MainGui_Listview,5,5,$MainGuiWidth-10,$MainGuiHeight-$GuiMenubarHeight-35) GuiControlSetPos($MainGui_Button5,$MainGuiHeight-$GuiMenubarHeight-30,$MainGuiWidth-10,25) EndFunc
Am Ende kannst du die Listview ja durchgehen und in ner Datei speichern:
_GuiCtrlListview_getItemCount for-schleife von 0 bis itemcount
_GuiCtrlListview_getItemTextString mit replace von | zu ;
fileopen mal ansehen, dort gibt es parameter zum überschreiben,...
filewrite mit der rückgabe von fileopen
fileclose nicht vergessen
Kannst dir überlegen, das filewrite in die schleife zu packen, oder alles ans ende (und die items in ner variable zusammenzusetzen)Ich hoffe du hast jetzt ein paar anregungen
MfG Kanashius
-
Ich hab bisher immer eines genutzt, das Recuva heißt. Das listet alle gelöschten, überschriebenen,... Dateien auf, die Endung ist dabei egal.
Könnten nur recht viele sein... -
Naja. Arrays sind nicht schwer. Stell es dir (1D) wie eine Liste vor. Durchnummeriert von 0 bis größe-1. Bei 20 Elementen nummeriert von 0 bis 19. Auf die einzelnen Einträge kannst du mit $var[NUMMER] zugreifen. Also einfach z.B. mit ner Schleife von 0 bis 19 die Liste durchgehen.
Bei 2D ist es statt einer Liste eine Tabelle. Der 1 Index gibt dir die Zeile an und der 2te die Spalte (oder andersrum, je nachdem wie du willst).
Bsp:
0|0 0|1 0|2
1|0 1|1 1|2
...
An die 1|1 Zelle kommst du also mit $var[1][1], an die 1|2 mit $var[1][2].Schon ist das Geheimnisvolle an Arrays gelöst.
Um durchzugehen nimmt man gerne eine for-Schleife:
for $i=0 to UBound($var)-1 step 1
$var[$i]
next
Ist nichts anderes, als den Teil dazwischen sooft zu wiederholen, bis $i nicht mehr kleiner als die größe ist, also wie oben, bis es 20 ist, dann wird abgebrochen. step 1 sagt, dass $i nach jedem durchlauf um 1 erhöht werden soll (man kann auch 2,-1,... angeben, wobei -1 endlos laufen würde und Fehler Compile-Fehler gibt, da Index>-1).
Bei 2D-Arrays baut man dann 2 Schleifen ineinander.Ich hoffe, jetzt verstehst du Arrays
-
An sich gibt es das nicht als Standartcontrol. Ich hab mal eine UDF geschrieben, die genau das macht.
FileExplorere List and TiewView
Unterstützt wird List oder Treeview, oder beides, je nachdem, was du haben möchtest.
Einfach das Beispiel ansehen.
In der _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) kannst du dann das öffnen bei doppelklick,... hinzufügen, dafür die Hilfe durchsehen und sonst hier fragen.Edit hatte grad nen Moment. Kannst jetzt ne Funktion hinzufügen und entfernen für doppelklicks:
_TLE_AddListviewFileDoubleClickFunction("testfunktion")
_TLE_DelListviewFileDoubleClickFunction("testfunktion") -
Also ich persönlich bin Absolut kein Fan von PDF. Gerade Tabellen aus PDFs zu kopieren ist sehr nervig.
Ich nutze am liebsten reine TXT-Dateien. Wenn der Style wirklich nötig ist, RTF (RichTextFormat). -
-
Ich mach es immer so, dass ich alle Controls, die außerhalb der Funktion genutzt werden, global am Anfang deklariere.
(Wenn möglich/sinnvoll in Arrays.) -
Scripte ist eher für fertige Programme. Dann eher in Projekte, würd ich sagen, auch wenn das vermutlich auch eher für fertige Scripte ist.
(Bzw. wenn die Entwicklung weit genug für eine Veröffentlichung ist, auch wenn sie noch nicht fertig ist.)
Die Kategorien sind also eher zum Vorstellen, als um Hilfe zu bitten. Auch wenn dort konstruktive Kritik immer gerne erwünscht ist
Du kannst aber auch hier weiter schreiben, wenn es passt. -
Naja. Leg nen Array an, das auf jedenfall groß genug ist. Speicher einfach mit, wie viele Elemente drin sind.
Dann nen ReDim und fertig
Falls es länger dauern darf, immer wenn das Array voll ist nen ReDim um z.B. +100 und dann weitermachen, am Ende einfach das, was von den 100 nicht gefüllt wurde mit ReDim wieder abtrennen.
(ReDim sollte sparsam verwendet werden, da es recht Rechenintensiv ist) -
Sieh dir mal Arrays genauer an. (Bugfix hat da auch ein sehr schönes Tutorial zu gemacht)
AutoIt
Alles anzeigenIf $cmdLine[0] > 0 Then for $i=1 to ubound($cmdLine)-1 step 1 if $cmdLine[$i] = "-i" then Msgbox(0,"","Install") elseif $cmdLine[$i] = "-u" then Msgbox(0,"","Uninstall") else Msgbox(16,"Error","Falsche Parameter!"&@crlf&"Erlaubte Parameter: "&@crlf&"-i : install"&@crlf&"-u : uninstall") endif next Else Msgbox(16,"","Keine Parameter vorhanden.") Exit EndIf