Hallo zusammen,
ich habe mir ein kleines Script zusammengestellt, um unterwegs Zahlungsbelege drucken zu können.
Da ich ein völliger AU-Noob bin, wollte erst einmal die Kernfunktion sicherstellen und dann das Script langsam erweitern. Nachdem alles funktionierte, habe ich mich an die zusätzliche Speicherung eines Hash-Wertes gemacht, um den rechtlichen Vorschriften bez. Veränderungssicherheit zu entsprechen. Das klappte auch wunderbar.
Dann fiel mir ein, dass der Hash-Wert sowie der Grund der Zahlung vielleicht auch in meinem ListView angezeigt werden sollten, der Vollständigkeit halber. Und schon ist es passiert: Seit ich die Variablen für Grund und Hash eingebaut habe, bricht das Script genau an der Stelle (Zeile 35 im nachstehenden Code) ab mit:
Subscript used on non-accessible variable.:
_ArrayAdd( $aGrundRes , $aGrund[0] )
_ArrayAdd( $aGrundRes , $aGrund^ ERROR
Hier das Script:
#Region Declarations
Global $sFile = @ScriptDir & "\Data\data.txt"
Global $sIniPath = @ScriptDir & "\settings.ini"
Global $aLfdNr, $aDate, $aKundenNr, $aKunde, $aKundeZusatz, $aStrasze, $aPLZ, $aOrt, $aBetrag, $aGrund, $aSHA256
Global $aLfdNrRes[1], $aDateRes[1], $aKundenNrRes[1], $aKundeRes[1], $aKundeZusatzRes[1], $aStraszeRes[1], $aPLZRes[1], $aOrtRes[1], $aBetragRes[1], $aGrundRes[1], $aSHA256Res[1]
Global Const $CALG_SHA_256 = 0x0000800c
#EndRegion
#Region Get archived data from data.txt and write to array
_ReadArchive( $sFile )
Func _ReadArchive( $sFile )
$hFile = FileOpen( $sFile , 0 )
For $i = 1 To _FileCountLines( $sFile ) Step 1
$sLine = FileReadLine( $hFile , $i )
;Add Lines to array
$aLfdNr = _StringBetween( $sLine , "" , ";" )
_ArrayAdd( $aLfdNrRes , $aLfdNr[0] )
$aDate = _StringBetween( $sLine , $aLfdNr[0] & ";" , ";" )
_ArrayAdd( $aDateRes , $aDate[0] )
$aKundenNr = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" , ";" )
_ArrayAdd( $aKundenNrRes , $aKundenNr[0] )
$aKunde = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" , ";" )
_ArrayAdd( $aKundeRes , $aKunde[0] )
$aKundeZusatz = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" , ";" )
_ArrayAdd( $aKundeZusatzRes , $aKundeZusatz[0] )
$aStrasze = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" , ";" )
_ArrayAdd( $aStraszeRes , $aStrasze[0] )
$aPLZ = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" & $aStrasze[0] & ";" , ";" )
_ArrayAdd( $aPLZRes , $aPLZ[0] )
$aOrt = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" & $aStrasze[0] & ";" & $aPLZ[0] & ";" , ";" )
_ArrayAdd( $aOrtRes , $aOrt[0] )
$aBetrag = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" & $aStrasze[0] & ";" & $aPLZ[0] & ";" & $aOrt[0] & ";" , ";" )
_ArrayAdd( $aBetragRes , $aBetrag[0] )
$aGrund = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" & $aStrasze[0] & ";" & $aPLZ[0] & ";" & $aOrt[0] & ";" & $aBetrag & ";" , ";" )
_ArrayAdd( $aGrundRes , $aGrund[0] )
$aSHA256 = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" & $aStrasze[0] & ";" & $aPLZ[0] & ";" & $aOrt[0] & ";" & $aBetrag & ";" & $aGrund & ";" , "" )
_ArrayAdd( $aSHA256Res , $aSHA256[0] )
Next
FileClose( $hFile )
EndFunc
#EndRegion
Alles anzeigen
In data.txt steht Folgendes:
10001;29.01.2017;88888;Eisen-Schmidt;Erwin Meier;Teststraße 99;55555;Testort;123,99;Testgrund;srgrewfwredgfsfd
10002;30.01.2017;99999;Holzwurm e.K.;Walter Schmitt;Probestraße 4;66666;Probeort;321,50;Probentest;43262465565247657
Und in der settings.ini die laufende Nummer:
Mich würde der Fehler ja nicht verblüffen, wenn es bis zur Hinzunahme von $aGrund / $aGrundRes bzw. $aSHA256 / $aSHA256Res nicht wunderbar geklappt hätte. Und wenn Globals nicht accessible sind, tja; irgendwas läuft da verkehrt.
(Die lange String-Wurst zum Auslesen der Zeilen mag eleganter gehen, aber so funktionierte es erst mal)
Fällt Euch vielleicht etwas dazu ein, woran mein Problem liegen könnte?