@AsperinJunkie, danke für die freundliche Erklärung
@BugFix, das ist eine schlaue Idee, jetzt wo man es sieht, schaut es sehr "einfach" aus Super!
Beiträge von devildevil3
-
-
@AsperinJunkie, das wäre eine enorme Verkürzung der Aufgabe. Aber wie vermeidest du das zb diese Zeile
"113 8IT P HSW LED- Hauptscheinwerfer" falsch ausgewertet wird.
113 ist die laufende Nummer, 8IT der PR Code, P Herkunft und HSW die Familie.
Aber HSW wäre doch auch gültig, da Großbuchstaben und 3 von der Zahl?
Ich werde versuchen das TUT mal zu verstehen, schaut auf ersten Blick wirklich gut erklärt aus.
-
Vielen lieben Dank erstmal für die Hilfe.
In der Zeile sehe ich ein Problem
If StringIsInt($string[$i]) Or StringIsUpper($string[$i]) ThenDa wird Überprüft ob der String Großbuchstaben, oder Zahlen enthält. Ein PR Code hat immer 3 Werte zb "0A0" . Bei Der Abfrage würden nur Einträge "freigegeben" die AAA oder 111 sind, beider vermischt, wäre ungültig.
Das ist aber mein Fehler. Ich hole mal etwas weiter aus. Und Zwar hat man die Möglichkeit über Elsa-online für sein PKW die PR Codes zu kopieren.
Diese PR Codes möchte ich sauber in eine txt Datei schreiben lassen, für jeden Code eine neue Zeile.
Die Ausgangsdatei habe ich mal angeheftet.
Die ersten Ziffern ist die laufende Nummer, und der 2te Block der eigentliche PR Code
Daher mein Script (Ist echt nicht so gut, wahrscheinlich extrem verkompliziert)
[autoit]#include <FileConstants.au3>
[/autoit][autoit][/autoit][autoit]
#include <MsgBoxConstants.au3>
#include <Array.au3>
; Create a constant variable in Local scope of the message to display in FileOpenDialog.
Local Const $sMessage = "Select a single file of any type."; Display an open dialog to select a file.
[/autoit][autoit][/autoit][autoit]
Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", "TXT (*.txt*)", $FD_FILEMUSTEXIST)Functionsaufruf()
[/autoit][autoit][/autoit][autoit]Func Functionsaufruf()
[/autoit][autoit][/autoit][autoit]
; Read the current script file into an array using the filepath.
Local $aArray = FileReadToArray($sFileOpenDialog)
If @error Then
MsgBox($MB_SYSTEMMODAL, "", "There was an error reading the file. @error: " & @error) ; An error occurred reading the current script file.Else
[/autoit][autoit][/autoit][autoit]For $i = 0 To UBound($aArray) - 1 ; Loop through the array.
[/autoit][autoit][/autoit][autoit]
$trim=$aArray[$i]
$gesamt=StringLen($trim)
$abfrage=StringTrimRight($trim,$gesamt-3)if $abfrage <10 Then $trimleft=StringTrimLeft($trim,2)
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
if $abfrage < 100 and $abfrage >10 Then $trimleft=StringTrimLeft($trim,3)
if $abfrage > 100 then $trimleft=StringTrimLeft($trim,4)
$gesamt=StringLen($trimleft)
$trimende=StringTrimRight($trimleft,$gesamt-3)
if StringRegExp($trimende, '(^[A-Z]*\d*|\d*[A-Z]*)') then FileWriteLine("PR-sauber.txt",$trimende&@CRLF)Next
[/autoit][autoit][/autoit][autoit][/autoit]
EndIfMit StringRegExp funktioniert es nur bedingt.
Es werden dennoch Kleinbuchstaben mit ausgegeben, daher sind die ersten Zeilen kein PR Code.
Sollte mit den RegExp mal versuchen irgendwie mich da einzuarbeiten, wenn man es kann, ist ist sehr "mächtig"
Edit:
Danke @ AspirinJunkie, damit kommt das gewünschte heraus! -
Hi, habe seit Jahren nichts mehr gemacht, bin total eingerostet.
Ich sitze vor einen Problem, ich möchte überprüfen ob ein String für meine Zwecke gültig ist.
Ein für mich gültiger String schaut zb so aus "AU1" =>Nur großbuchstaben und ggf Ziffern vorhanden.
Dies wird wohl nur über StringRegExp funktionieren? Wenn ja, da steige ich nicht durch, ist mir seit Jahren ein Buch mit 7 Siegeln
Weil vorhandene Funktionen nicht gehen, zb StringIsUpper (Weil halt ggf eine Ziffer dabei steht)
Hat da jemand eine Idee?
Vielen Dank
-
Ich bitte um verzeiung
Im Anhang die Ini
Hier mal das Script, was ich angepasst habe (Ich verwende weiterhin GetWinText)
Vielen Dank für eure Hilfe
Funktioniert, habe die Variante ohne GetWinText gewechselt
-
Vielen Dank, habe das script direkt mal angepasst, da ih die Ini Datei geändert habe, es existirt nur noch [Laserdruck] keine Unterscheidung mehr in der Ini zwischen A4 und A3.
Funktioniert super.
Habe dierekt ein Frage. Ich möchte verschiedene Reiter (Tabs) anlegen, der Letzte soll "Berechen" heißen.
Dort soll aus alles gewählten Punkten in verschiedenen Tabs der Endpreis ermittelt werden
Also praktisch habe ich ja schon den Tab Laserdruck und Scannen. Ich treffe in beiden Tabs die gewüschte auswahl und möchte in einen anderen Tab den Endpreis haben.
Dies wird ohne Array nicht gehen. Da ja die Combobox nicht aus anderen Tabs ausgelesen werden kann, oder Irre ich mich da?
-
ok, habe es angepasst, allerdings wird kein wert mehr ermittelt. Aber das schaue ich mir morgen mal an
Also der Wert, den ich über GUICtrlCreateCombo auswähle. -
das wäre super, nur muss ich da schauen wie ich die Werte aus der ini da rein bekomme. In den jetzigen habe ich den CodeBaustein einfach aus einen alten Script übernommen
-
Vielen Dank ersteinmal
Sagen wir es so, ich habe keine Ahnung was der Unterschied ist. Ich weiß das ich den Bfehl den ich verwendet habe, schon mal in einen Programm von mir hatte. Habe mich jetzt nicht näher damit beschäftigt ob es alternativen gibt.Aber was ist der Vorteil von GUICtrlCreateCombo? gibt es da Vor/Nachteile gegenüber meinen Weg?
Edit durch die paar Zeilen
[autoit]
[/autoit][autoit][/autoit][autoit]
Case $tab ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Show/Hide the combo as required
Switch GUICtrlRead($tab)
Case 0
WinSetState($A4, "", @SW_SHOW)
WinSetState($A3, "", @SW_SHOW)Case Else
[/autoit][autoit][/autoit][autoit]
WinSetState($A4, "", @SW_HIDE)
WinSetState($A3, "", @SW_HIDE)EndSwitch
[/autoit]ist das Script sehr, sehr träge geworden, nicht mehr verwendbar. aber warum ?
-
Hallo, da Bilder mehr sagen als tausend Wort habe ich mal 2 gemacht.
Ich wollte eine Gui mit mehreren Tabs, nur die Combo Box verschwindet nicht, und ist in jeden Tab sichtbar?
[autoit]
Wahrscheinlich ist es ganz einfach, nur komme ich nicht darauf
[/autoit][autoit][/autoit][autoit]
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Description=Produkt Rechner für Nicole
#AutoIt3Wrapper_Res_Fileversion=1
#AutoIt3Wrapper_Run_Obfuscator=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****$ini = @ScriptDir&'\Texte\Datei.ini'
[/autoit][autoit][/autoit][autoit]#include<GuiComboBox.au3>
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
#include<GUIConstantsEx.au3>; Puffer für den Text
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
Global $sTextA4
Global $sTextA3;Gui
[/autoit][autoit][/autoit][autoit]
$Gui=GUICreate ('Produkt-Rechner', 900,530); Wagerechte; Höhe
GUISetFont(9, 300)
GUISetBkColor(0x3300B2);663399 )$tab=GUICtrlCreateTab (5,10, 880,510)
[/autoit][autoit][/autoit][autoit]
$tab0=GUICtrlCreateTabitem ("A3 und A4")
GUICtrlcreatelabel ('Einstellungen für A4' ,10,40)
$A4 = _GUICtrlComboBox_Create ($GUI,'', 10, 70, 250, 296)
$ini_sektions = IniReadSection($ini, "Laserdruck")
For $i = 1 To $ini_sektions[0][0]
_GUICtrlComboBox_AddString($A4, $ini_sektions[$i][0])
Next
GUICtrlcreatelabel ('Einstellungen für A3',10,140)
$A3 = _GUICtrlComboBox_Create ($GUI,'', 10, 160, 250, 296)
$ini_sektions = IniReadSection($ini, "Laserdruck")
For $i = 1 To UBound($ini_sektions) - 1
_GUICtrlComboBox_AddString($A3, $ini_sektions[$i][0])Next
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
GUICtrlcreatelabel ('Hier bitte gewünschte Anzahl für A4 eintragen' ,10,90)
GUICtrlcreatelabel ('Hier bitte gewünschte Anzahl für A3 eintragen' ,10,180)
$Anzahl = GUICtrlCreateEdit ("1", 90,110,50,20,0)
$Anzahl2 = GUICtrlCreateEdit ("1", 90,200,50,20,0)
$berechnena4 = GUICtrlCreateButton ('Berechnen für A4', 300,70)
$berechnena3 = GUICtrlCreateButton ('Berechnen für A3', 300,160)
$berechnenA4undA3zusammen=GUICtrlCreateButton ('Berechne Gesamtsumme von A4 und A3', 450,85)
$endbutton = GUICtrlCreateButton ('Schließen', 800,470)$tab2=GUICtrlCreateTabitem ( "Scannen")
[/autoit][autoit][/autoit][autoit][/autoit][autoit]$tab99=GUICtrlCreateTabItem("Über")
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
GUICtrlCreateLabel("Hier steht mal eine Erklärung",80,130,420,120)
GUICtrlCreateTabitem (""); end tabitem definitionGUISetState(@SW_SHOW)
[/autoit][autoit][/autoit][autoit];Gui ENDE
[/autoit][autoit][/autoit][autoit][/autoit][autoit]While 1
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
$msg = GUIGetMsg()$zahl1 = GUICtrlRead($Anzahl)
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
$zahl2 = GUICtrlRead($Anzahl2)Select
[/autoit][autoit][/autoit][autoit][/autoit][autoit]Case $msg = $endbutton Or $msg = $GUI_EVENT_CLOSE
[/autoit][autoit][/autoit][autoit]
exitcase $msg = $berechnena4
[/autoit][autoit][/autoit][autoit]
GetWindowText ($A4, $sTextA4, 260)
$a4wert=IniRead($ini,'Laserdruck',$sTextA4,"Wählen Sie Bitte eine Position")
$a4wert=$a4wert*1
$Ergebnisa4 = $zahl1 * $a4wert * 1.19
$ErgebnismitMWSTa4=Round($Ergebnisa4,3)$AusgabeA4=$zahl1 & "*" & $a4wert & "= " & $ErgebnismitMWSTa4&' €' & 'incl. Mwst'
[/autoit][autoit][/autoit][autoit]
if $a4wert='Wählen Sie Bitte eine Position' then $AusgabeA4='Wählen Sie Bitte eine Position'MsgBox (64,"Preis des Auftrages A4",$AusgabeA4 ) ;Ausgabe der Rechenaufgabe
[/autoit][autoit][/autoit][autoit][/autoit][autoit]case $msg = $berechnena3
[/autoit][autoit][/autoit][autoit]
GetWindowText ($A3, $sTextA3, 260)
$a3wert=IniRead($ini,'Laserdruck',$sTextA3,"Wählen Sie Bitte eine Position")
$a3wert= $a3wert*2
$Ergebnisa3 = $zahl2 * $a3wert*1.19
$ErgebnismitMWSTa3=Round($Ergebnisa3,3)$AusgabeA3=$zahl2 & "*" & $a3wert & "= " & $ErgebnismitMWSTa3 &' € '& 'incl. Mwst'
[/autoit][autoit][/autoit][autoit]
if $a3wert='Wählen Sie Bitte eine Position' then $AusgabeA3='Wählen Sie Bitte eine Position'
MsgBox (64,"Preis des Auftrages A3",$AusgabeA3 )
;Ausgabe der Rechenaufgabecase $msg = $berechnenA4undA3zusammen
[/autoit][autoit][/autoit][autoit]GetWindowText ($A4, $sTextA4, 260)
[/autoit][autoit][/autoit][autoit]
GetWindowText ($A3, $sTextA3, 260)$a4wert=IniRead($ini,'Laserdruck',$sTextA4,"Wählen Sie Bitte eine Position")
[/autoit][autoit][/autoit][autoit]
$a3wert=IniRead($ini,'Laserdruck',$sTextA3,"Wählen Sie Bitte eine Position")$Ergebnisa4unda3zusammen = (($zahl1 * $a4wert)+($zahl2*$a3wert*2))*1.19
[/autoit][autoit][/autoit][autoit]
$AusgabeA4unda3zusammenmitmwst=Round($Ergebnisa4unda3zusammen,3)$AusgabeA4unda3zusammenmitmwst=$AusgabeA4unda3zusammenmitmwst&' €' & ' incl. Mwst'
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
if $Ergebnisa4unda3zusammen=0 then $AusgabeA4unda3zusammenmitmwst='Bitte Positionen wählen'
MsgBox (64,"Preis des Auftrages A4 und A3",$AusgabeA4unda3zusammenmitmwst & 'incl. Mwst') ;Ausgabe der RechenaufgabeEndSelect
[/autoit][autoit][/autoit][autoit]wend
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]Func GetWindowText ($hWnd, ByRef $sString, $nMaxCount)
[/autoit][autoit][/autoit][autoit]Local $type = 'wstr'
[/autoit][autoit][/autoit][autoit]
If (IsPtr ($sString)) Then _
$type = 'ptr'Local $aRes = DllCall ("user32.dll", 'int', 'GetWindowTextW', _
[/autoit][autoit][/autoit][autoit]
'HWND', $hWnd, _
$type , $sString, _
'int' , $nMaxCount)If @error Then _
[/autoit][autoit][/autoit][autoit]
Return @errorIf (not IsPtr ($sString)) Then _
[/autoit][autoit][/autoit][autoit]
$sString = $aRes[2]
Return $aRes[0]EndFunc
[/autoit]Ich weiß es ist nicht schön, aber ich komme eigentlich ganz gut mit den Namen der Variablen zurecht
-
Vielen Dank, aber es mit Greenhorn´s Methode gemacht. Funktioniert so wie es soll.
Vielen Dank nochmals
-
Habe sie mal angehangen.
Erstellt mit Notepad ++
-
keineswegs, das mysteriöse Zeichen bleibt bei mir nachwievor oO
-
Da hast du recht, ich habe überersehen das Notpad++ prinzipiell mit 1 anfängt.
Also Cousor steht ganz links, und es zählt schon ein Zeichen.Habe es nachgezählt. sind wirklich nur 28
-
jep AutoIt und Scite
-
danke erstmal für deine Hilfe, bei mir endet die Nacht auch gegen 5
-
Bei der Zeile wo der Fehler auftritt ist der String 29 Zeichen Lang, im der Ini bis zu den = zeichen auch 29 Zeichen, dennoch wird in der msgbox noch ein 30igtes Zeichen bei mir angezeigt ?
-
-
das gepostete ist das komplette Script, keine Zeile Unterscheidet sich, komische Sache
Habe jetzt alles aktualisiert, fehler tritt wesentlich seltener Auf, aber kommt immer noch mich chinesischen Zeichen ?
und das ist die ganze ini Datei
Code
Alles anzeigen[Laserdruck A4] Schwarz Weiß=0.25 Schwar Weiß, mehr als 5=0.22 Farbig=1.10 Aufkleber weiß s/w=0.85 Aufkleber weiß Farbig=1.20 Aufkleber Transparent s/w=1.50 Aufkleber Transparent Farbig=2.60 [Laserdruck A3] Schwarz Weiß=0.50 Schwar Weiß, mehr als 5=0.44 Farbe=2.20
Vielen Dank
-
an was liegt es dann aber ?
Hier ist zb. das "w" zu viel, das Zeichen ändert sich bei mir aber immer.
Ich glaube ich aktualisiere erst mal die Programme. Sind etwas älter glaube ich