Hallo zusammen.
ich arbeite hobbymäßig an einem Programm mit dem ich im Geschäft automatisch Angebote erstellen möchte.
Hierfür lese ich eine große Txt.-Datei ein und splitte diese auf.
Hier ein Auszug der für die folgende Problemaitk wichtigen Stelle des Codes:
[autoit]
For $z = 0 To UBound($aEingabe)-1
$aString=StringSplit($aDaten[_ArraySearch($aArtNr2,$aEingabe[$z][0],0,"",0,1)],@TAB,2)
;~ _ArrayDisplay($aString)
$aEingabe[$z][2]=StringReplace($aString[1],'"',"");- Bezeichnung
$aEingabe[$z][3]=StringReplace(StringFormat("%.2f",StringReplace(StringReplace($aString[13],',',"."),'"',"")),'.',",");- EVK
$aEingabe[$z][4]=StringReplace(StringFormat("%.2f",StringReplace(StringReplace($aString[14],',',"."),'"',"")),'.',",");- HEK
$aEingabe[$z][5] =StringReplace(StringFormat("%.2f",StringReplace(StringReplace($aString[15],',',"."),'"',"")),'.',",") ;- HEK-Staffel
$aEingabe[$z][6]=int(StringReplace($aString[16],'"',""));- Staffelmenge
$aEingabe[$z][7]=int(StringReplace($aString[22],'"',""));- Lagermenge
Next
Return $aEingabe
EndFunc
$aPositionen=_Eingabe()
[/autoit][autoit][/autoit][autoit]for $i=0 to UBound($aPositionen)-1
Select
Case $aPositionen[$i][1] < $aPositionen[$i][6] And $aPositionen[$i][1] <= $aPositionen[$i][7]
$PosPreis=$aPositionen[$i][4] &" €"
$Lieferbar="ab Lager"
Case $aPositionen[$i][1] < $aPositionen[$i][6] And $aPositionen[$i][1] > $aPositionen[$i][7]
$PosPreis=$aPositionen[$i][4] &" €"
$Lieferbar=$aPositionen[$i][7] & " Stück ab Lager"
Case $aPositionen[$i][1] >= $aPositionen[$i][6] And $aPositionen[$i][1] <= $aPositionen[$i][7]
If $aPositionen[$i][6] = "" Or $aPositionen[$i][6] = 0 Then
$PosPreis=$aPositionen[$i][4] &" €"
Else
$PosPreis=$aPositionen[$i][5] &" €"
EndIf
$Lieferbar="ab Lager"
Case $aPositionen[$i][1] >= $aPositionen[$i][6] And $aPositionen[$i][1] > $aPositionen[$i][7]
If $aPositionen[$i][6] = "" Or $aPositionen[$i][6] = 0 Then
$PosPreis=$aPositionen[$i][4] &" €"
Else
$PosPreis=$aPositionen[$i][5] &" €"
EndIf
$Lieferbar=$aPositionen[$i][7] & " Stück ab Lager"
EndSelect
$Position= $Position & $aPositionen[$i][0] &@TAB& $aPositionen[$i][1] &@TAB& $aPositionen[$i][2] &@TAB& $PosPreis &@TAB& $Lieferbar &@CRLF
MsgBox(0,"",$Position)
Next
;- Gültigkeitsdatum berechnen <- 30 Tage +x zum Ende des Monats
$aValid= StringSplit(_DateAdd('d',30,_NowCalcDate()),"/",2)
$aValid[2]= _DateDaysInMonth($aValid[0],$aValid[1])
Dim $Angebotstext[1]
$Angebotstext[0]=$aIni[1][1] & $aIni[3][1] & $Position &@CRLF&@CRLF& $aIni[4][1] & $aIni[5][1]
$Angebotstext[0]= StringReplace($Angebotstext[0],"{Gültig}",$aValid[2]&"."&$aValid[1]&"."&$aValid[0])
$Angebotstext[0]= StringReplace($Angebotstext[0],"{Enter}",@CRLF)
$Angebotstext[0]= StringReplace($Angebotstext[0],"{Tab}",@TAB)
;~ _ArrayDisplay($Angebotstext)
_ArrayToClip($Angebotstext)
MsgBox(0,"Das Angebot wurde in die Zischenablage kopiert","Klicken Sie in das Textfeld in welches das Angebot eingefügt werden soll und drücken Sie anschließend ""STRG+V"".")
Leider unterscheidet sich die Länge der Eartikelbezeichnungen extrem, so dass diese nicht sauber untereinander stehen.
Beispiel:
Art.Nr. Menge Beschreibung Stückpreis Lieferzeit
##### 1 Druckerkabel vergossen 2m 3,99 € ab Lager
##### 10 Druckerkabel vergossen 2m 3,99 € ab Lager
##### 1 VGA-Anschlusskabel , DDC-fähig, 15 pol. HD Stecker/Stecker 1m 1,49 € ab Lager
##### 10 VGA-Anschlusskabel , DDC-fähig, 15 pol. HD Stecker/Stecker 1m 1,49 € ab Lager
Wie schaffe ich es, ohne Excel oder ähnliches, die Laufweite der Tabs genau zu definieren?
Ich habe folgendes als Ansatz versucht:
dim $aSpace[UBound($aPositionen)][3]
for $i=0 to UBound($aPositionen)-1
$aSpace[$i][0]= stringlen($aPositionen[$i][2])
;~ $aSpace[$i][1]= $i
Next
;~ _ArrayDisplay($aSpace)
;~ _ArraySort($aSpace)
for $i=0 to UBound($aSpace)-1
$aSpace[$i][1]=$FixLen-$aSpace[$i][0]
Next
;~ _ArraySort($aSpace,"","","",1)
for $i=0 to UBound($aSpace)-1
Select
Case StringLen($aPositionen[$i][2])>=$FixLen
$Position= $Position & $aEingabe[$i][0] &@TAB& $aEingabe[$i][1] &@TAB& StringLeft($aEingabe[$i][2],50) &@TAB& $aEingabe[$i][3] &@CRLF &@TAB&@TAB& StringMid($aPositionen[$i][2],$FixLen+1) &@CRLF
Case Else
$aEingabe[$i][2]=$aEingabe[$i][2] & _StringRepeat(" ",$aSpace[$i][1]+1)
$Position= $Position & $aEingabe[$i][0] &@TAB& $aEingabe[$i][1] &@TAB& $aEingabe[$i][2] &@TAB& $aEingabe[$i][3] &@CRLF
EndSelect
Next
Dim $aAngebot[1]
$aAngebot[0]= $Position
_ArrayToClip($aAngebot)
Also Leerzeichen einfügen.
Alternativ habe ich versucht herauszufinden wieviele Leerzeichen einem Tab entsprechen.
Letzteres funktioniert gut im Editor, aber in Programmen die mit anderen Fonts arbeiten (unterschiedlich breite Buchstaben etc.) funktioniert das logischerweise nicht sauber.
Hat da jemand eine Idee für mich?