Wie schon gesagt: Du mußt das Array von IniReadSection in einer EIGENEN SCHLEIFE auswerten, mit EIGENER ZÄHLVARIABLE.
Und die RegExp-Auswertungen jetzt plötzlich auch als 2D-Array zu betrachten ist falsch.
Ich könnte es jetzt ruckzuck korrigieren, aber das hilft dir nichts.
Du mußt erst mal verstehen was dort abläuft.
Beiträge von BugFix
-
-
Text: 3 of 3
Hier hast du doch alles, was du willst: Text: 3 of 3
Einfach die Datei laden, mit ControlGetText diesen Text ausgeben lassen. Was hinter 'of' steht ist deine Anzahl.Edit:
[autoit]
So könntest du es machen:Opt('WinTitleMatchMode', 2) ; somit wird das Fenster auch erkannt, wenn ein Teil des Titels angegeben wird
[/autoit]
$titel = 'Teil des Fenstertitels'
$text = ControlGetText($titel, '', '[CLASS:Static; INSTANCE:1]')
$anzahl = StringRegExpReplace($text, '(\d+\sof\s)(\d+)', '$2') -
Schau dir mal an WAS für ein Array IniReadSection zurückgibt.
Was soll da dieses: $a[$i][$i] <== dort kann nur 0 (schlüssel) oder 1 (wert) verwendet werden. -
Ahja, diese Zeile (und alle die $a[$i] verwenden) ist falsch:
[autoit]$date = StringRegExp($a[$i], '\d{2}\.\d{2}\.\d{4}', 1)
[/autoit]
Denn INIReadSection gibt ein 2D-Array zurück! -
Wüsste auch nicht wie
Weist du überhaupt, was ich meine?
<Start> <Programme> <AutoIt v3> <AutoIt Window Info>Dieses Tool sollst du benutzen um Infos über dein Anwendungs-Fenster zu bekommen.
-
Du bist heute lustig

Fragst was du falsch machst, ohne zu sagen, was schiefläuft.
Ich vermute mal, du bekommst keine Ini's in dein Array?
Der Aufruf ist nämlich falsch. Als Parameter mußt du nur die Erweiterung übergeben! Also: 'ini' -
Du kannst auch die Größe für das Icon weglassen (0).
[autoit]$hIcon = _WinAPI_LoadImage(0, 'Pfad_Icon', $IMAGE_ICON, 0, 0, $LR_LOADFROMFILE)
[/autoit]Das Icon wird dann in der aktuellen Größe angezeigt.
-
Ein bischen Code wäre schon hilfreich.
Wenn wir erst deine Arbeitsumgebung selbst erstellen müssen, um dein Problem nachzuvollziehen, geht uns glatt die Motivation flöten.
Aber du kannst das Icon mit: _WinAPI_LoadImage() laden, dann hast du ein Handle für deine Funktion.
-
Versuche doch mal, ob das Windows-Info Tool dir im Text evtl. das markierte ausgibt:
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
Dann kannst du den Wert sofort verwenden. -
Ist doch nur etwas Stringbastelei:
[autoit]$a = 'c:\0rdner1=\\server\share\28.09.2009\ordner1'
[/autoit][autoit][/autoit][autoit]
;~ $a = 'c:\0rdner1=\\server\share\blub\28.09.2009\ordner1' ; auch längere Pfade möglich$date = StringRegExp($a, '\d{2}\.\d{2}\.\d{4}', 1)
[/autoit][autoit][/autoit][autoit]
$date = $date[0] & '|'$local = StringLeft($a, StringInStr($a, '=')-1) & '|'
[/autoit][autoit][/autoit][autoit]$server = StringRegExp($a, '(\\\\\w+\\)(\w+\\)+', 2)
[/autoit][autoit][/autoit][autoit]
$server = $server[0]$string = $date & $local & $server
[/autoit][autoit][/autoit][autoit]ConsoleWrite($string & @CRLF)
[/autoit] -
kla darf man ein trennzeichen benutzen oda nich?!
Es ist nicht zu empfehlen. Da es als Zeichen im Inhalt vorkommen kann, sollte man von Anfang an diese Fehlerquelle ausschließen. Header mit den Positionsdaten ist eine saubere Sache. -
Von der Überlegung her, denke ich, dass du durchaus verschiedene Dateien 'zusammenklöppeln' kannst. Allerdings würde ich dieses:
$binary & "|" & $binary2
weglassen.
Du mußt die Dateien, um sie ausführen zu können, sowieso wieder aus der Summendatei extrahieren. Also mußt du zusätzlich die Anfangs- und Endpositionen deiner integrierten Files in der Gesamtdatei abspeichern.
Wie gesagt: ungetestet, nur gedacht.
-
Rekursive Dateisuche ist das Stichwort.

Ich hab es mal so genmacht, dass die Namen Vornullen bekommen, dann ist der Dateiname gleich lang - sieht besser aus.
So gehts:Spoiler anzeigen
[autoit]Local $startPath = 'Dein Start-Pfad'
[/autoit] [autoit][/autoit] [autoit]
Local $ZielPfad = 'Dein Pfad zum Abspeichern\' ; Backslash mit verwenden!
Local $ext = 'jpg'Local $arJPGFiles = _GetFilesFolder_Rekursiv($startPath, $ext, 0)
[/autoit] [autoit][/autoit] [autoit]
Local $len = StringLen(String($arJPGFiles[0]))
Local $nul = ''
If $len > 1 Then
For $i = 1 To $len -1
$nul &= '0'
Next
EndIfFor $i = 1 To $arJPGFiles[0]
[/autoit] [autoit][/autoit] [autoit]
FileMove($arJPGFiles[$i], $ZielPfad & StringRight($nul & $i, $len) & '.jpg')
If @error Then
MsgBox(262160,"ACHTUNG","Die Datei" & @CRLF & $arJPGFiles[$i] & @CRLF & _
"konnte nicht verschoben werden, da eine Zieldatei mit dem Namen" & @CRLF & _
$ZielPfad & StringRight($nul & $i, $len) & '.jpg' & @CRLF & "bereits existiert!")
EndIf
Next
MsgBox(262176,"FERTIG","Verschieben und Umbenennen der Dateien beendet.");==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Recursive listing of files and/or folders
; Parameter(s): $sPath Basicpath of listing ('.' -current path, '..' -parent path)
; $sExt Extension for file selection '*' or -1 for all (Default)
; $iDir -1 Files+Folder(Default), 0 only Files, 1 only Folder
; optional: $iRetType 0 for Array, 1 for String as Return
; optional: $sDelim Delimiter for string return
; 0 -@CRLF (Default) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Default) or string with found pathes of files and/or folder
; Array[0] includes count of found files/folder
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
EndFuncFunc _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
[/autoit]
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
$strFiles &= $file.Path & $Delim
Else
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc -
Verwende für die Breite der letzten Spalte
[autoit]$LVSCW_AUTOSIZE_USEHEADER
[/autoit]
dann wird diese automatisch angepaßt. -
Warum verwendest du diesen umständlichen Code?
Ich hatte dir doch ein viel einfacheres Bsp. gepostet: [ offen ] Markierter Text direkt in Excel...Übrigens:
Acrobat Reader ist ein ressourcenfressendes Monster.
Verwende doch FoxIt Reader, der ist klein und schnell. -
@nicric: Schau mal in dein BIOS, was dort für eine Zeit geführt wird. Evtl. Problem mit Sommerzeit?
-
ContinueCase ist aber der falsche Weg!
Du wirst es merken, wenn weitere Cases dadrunter stehen.ContinueCase bedeutet: Setze mit nächstem Case fort und nimm an dieser Case ist wahr.
Heißt: der Code vom nächsten Case wird ausgeführt. -
Wir machen mit unserer Familie jährlich ein Treffen. Und das ist schon haarig so etwas übereinstimmend zu organisieren, dass jeder zufrieden ist. Und wir sind nur 26 Leute.
Insofern wage ich mal zu behaupten, dass es an eine Sysiphosarbeit grenzt, so etwas für eine große Anzahl von Menschen zu managen. (Falls überhaupt Gemeinsamkeit zu erreichen ist)Und mal noch ein anderer Aspekt:
Hat jemand von euch schon mal ein Blind Date gehabt? Bzw. habt ihr euch mal mit jemandem getroffen, den ihr vorher lange Zeit 'kanntet' vom Chat her?
In 90% der Fälle werdet ihr überrascht sein - aber unangenehm. Dies hat weniger mit eurem Gegenüber zu tun, sondern mehr mit dem Bild, das ihr euch von ihm selbst erstellt habt.
Also ich weiß nicht, ob es unbedingt erstrebenswert ist, sich im RL zu sehen. Hier im Forum definieren wir uns in erster Linie über unser gemeinsames Interesse an AutoIt und die Fähigkeiten, die wir darin erworben haben. Aber wir sind ja auch Menschen mit Macken und Fehlern - und ob die wem anders gefallen..?
-
Diese Methode ist nur dann effektiv, wenn du damit irgendetwas einsparen kannst, Speicherplatz, Zeit usw.
Aber nur "weil es geht" einen lesbaren Ausdruck in etwas (auf Anhieb) unleserliches zu verwandeln um es danach wieder in lesbare Daten zu transferieren ist suboptimal.Ja Andy, so ist es. Und da in diesem Kontext etliche Abfragen, die Zeit verbraten, eingespart werden, ist es hierfür durchaus sinnvoll.
Dass weniger Code zu schreiben ist, ist ein angenehmer Nebeneffekt.
Auch wenn die Einsparungen sicher nicht von Belang sind, erachte ich es als sinnvoll sich rechtzeitig Optimierungsmöglichkeiten zu erschließen. Bei größeren Skripten hat man dann tatsächlich einen Benefit. -
Das ist alles viel zu kompliziert.
[autoit]
Wenn du Excel bereits offen hast und die erste zu beschreibende Zelle markiert ist, starte einfach folgendes Skript.
Wechsele dann in dein PDF-Dokument (egal ob mit dem lahmen Acrobat Reader oder was vernünftigem
), markiere den zu übertragenen Text und mit STRG+ALT+C wird alles ohne Zeilenumbrüche in Excel eingefügt. Dann wird in Excel auf die nächste Zeile gewechselt. Dabei bleibt Excel selbstverständlich im Hintergrund. Du kannst also bequem, ohne dein PDF-Dokument zu verlassen, beliebig viele Passagen so an Excel übergeben.
Bist du fertig, beendest du das Skript mit STRG+ALT+E und speicherst dein Excel. (auch das läßt sich bei Bedarf gleich noch per Skript ausführen
)HotKeySet('^!c', '_ClipToExcel') ; Strg + Alt + c ==> Text im PDF kopieren und dann in Excel einfügen
[/autoit][autoit][/autoit][autoit]
HotKeySet('^!e', 'ende') ; Strg + Alt + e ==> Ende
Global $oExcel = ObjGet("", "Excel.Application")While True
[/autoit][autoit][/autoit][autoit]
Sleep(100)
WEndFunc _ClipToExcel()
[/autoit][autoit][/autoit][autoit]
Send('^c')
$oExcel.ActiveCell.Value = StringRegExpReplace(ClipGet(), @CRLF, ' ')
$oExcel.ActiveCell.Offset(1, 0).Select
EndFuncFunc ende()
[/autoit]
Exit
EndFunc