Hallo zusammen,
meine Überschrift ist etwas konfus, aber ich wußte nicht, wie ich das Problem sonst beschreiben soll. Ich bin absoluter Anfänger was AutoIT angeht, hatte aber bisher den Eindruck die Scriptsprache ist leicht zu lernen, verständlich und relativ mächtig. Bis gestern.
Ich bin dabei eine kleine Anwendung zu erstellen, die ein Verzeichnis auf Dateien mit bestimmter Endung überprüft (das funktioniert), aus dem Dateinamen einen bestimmten Teil (die Rechnungsnummer) extrahiert (das funktioniert, ist aber bisher nicht toll gelöst), diese Nummer zusammen mit dem Dateinamen in ein Array schreibt (auch das funktioniert) und die Daten aus dem Array später dann in eine Datei schreibt. Ich brauche noch einen Zwischenschritt, an dem ich bisher noch nicht gesessen habe; nämlich muss zu der Rechnungsnummer noch eine Mitgliedsnummer und ein Mitgliedsname in einer SQL-Datenbank abgefragt und ins Array integriert werden. Das ist hier allerdings jetzt zunächst mal ohne Relevanz. Danach wird mittels Programmaufruf eine Archivierung der Rechnungsdokumente unter Verwendung der Daten des Arrays $oRechArray als Verschlagwortung angestoßen (dazu dient diese index.imp-Datei).
Ich stelle hier mal meinen Quelltext rein - wie gesagt: Ich bin Anfänger, also bitte keine Profikniffe erwarten.
#include<string.au3>
; Variablendeklaration
$oVSHDir = "C:\Verzeichnis\"
$oRechSuchString = "Rechnung_*.pdf"
$oRechNumStart = "Rechnung_"
$oRechNumEnd = "#"
$oIndeximp = $oVSHDir & "index.imp"
$i = "0"
dim $oRechArray[500][2]
; Ausführen solange Dokumente im Ordner vorhanden sind
while FileExists($oVSHDir & $oRechSuchString)
; Den Namen des ersten Dokuments in eine Variable schreiben
$oFirstFile = FileFindFirstFile($oVSHDir & $oRechSuchString)
; Fehler abfangen (falls keine Datei vorhanden ist)
if $oFirstFile = -1 Then
MsgBox(0,"Mahatma Fatal Error","Das Verzeichnis enthaelt keine Dateien")
Exit
EndIf
; Ausführen solange ein Dateiname vorhanden ist
while $oFirstFile <> -1
; Handel auf die Datei erstellen
$oFile = FileFindNextFile($oFirstFile)
; Den Dateinamen der Datei in eine Variable schreiben
$oRechnungsname = FileGetLongName($oFile)
; Die Rechnungsnummer der Datei aus dem Namen extrahieren (Ab Zeichen 10, 12 Zeichen lang)
; Das ist noch nicht final, weil noch nicht schön gelöst
$oRechnummerArray = _StringBetween($oRechnungsname,$oRechNumStart,$oRechNumEnd)
$oRechnummer = $oRechnummerArray[0]
; Vorhandene/voranstehende Nullen aus der Rechnungsnummer entfernen
while StringLeft($oRechnummer,1) = 0
$oRechnummer = StringReplace($oRechnummer,"0","",1)
WEnd
; Rechnungsnummer und Rechnungsname in ein mehrdimensionales Array schreiben
$oRechArray[$i][0] = $oRechnummer
$oRechArray[$i][1] = $oRechnungsname
; Den Arrayzzeilenzähler hochzählen
$i = $i + "1"
WEnd
WEnd
; Dateihandel für index.imp erstellen
$oFH = FileOpen($oIndeximp,1)
; Die index.imp befüllen, solange noch Daten im Array sind
while $i >= 0
FileWriteLine($oFH,"^Daten1^,^Daten2^,^^,^^,^"& $oRechArray[$i][0] &"^,^^,^^,^^,^KK^,^^,^^,^^,^^,^^,^^,^^,^^,^^,^^,"& $oRechArray[$i][1])
$i = $i - "1"
WEnd
; Dateihandel für die index.imp schließen
FileClose($oFH)
Alles anzeigen
Als Fehlermeldung beim Ausführen erhalte ich folgendes:
ZitatC:\Austausch\AutoIT\rechnung_autoarchivierung.au3 (47) : ==> Subscript used with non-Array variable.:
$oRechnummer = $oRechnummerArray[0]
$oRechnummer = $oRechnummerArray^ ERROR
Wenn ich einen Syntax-Check durchführe, erhalte ich keinen Fehler.
Ich verstehe diese Meldung jedoch nicht. Solange das Script in der While-Schleife ist, funktioniert alles wunderbar, aber dann, wenn keine Datei mehr vorhanden ist kommt es zu diesem Fehler. Wäre nett, wenn mir jemand von euch da helfen könnte.
Dank & Gruß
Boni