Hey
ich hab ne Frage, unzwar will ich die werte mit
IniReadSection("test", "test"
[/autoit]auslesen
dabei wird aus der datei "test", der wert "$hallo" und "C:/" ausgelesen,
wie kann ich jetzt machen das $hallo = C:/ ist?
mfg
Hey
ich hab ne Frage, unzwar will ich die werte mit
IniReadSection("test", "test"
[/autoit]auslesen
dabei wird aus der datei "test", der wert "$hallo" und "C:/" ausgelesen,
wie kann ich jetzt machen das $hallo = C:/ ist?
mfg
dankeschön
habe schon herausgefunden das es mit Assign / Eval zu tun hat,
Eval braucht es dann anscheind ja nicht,
ich kann dieses script im moment nicht testen
aber es ist ja auch kein problem wenn es
Global $a_Ini = IniReadSection('test.ini', 'section')
Assign(StringTrimLeft($a_Ini[1][0], 1), $a_Ini[1][1])
MsgBox(0, '', $variable)
ist? oda?
Ja, das klappt natürlich auch. Ist sogar irgendwie sinnvoller.
so hatte ichs auch gemeint
dankeschön!
irgentwie wills nicht wie ich
schau ma so hab ichs..
Func _LoadSettings()
$Key = IniReadSection(@ScriptDir & "\" & $Name & "\" & $Name & ".ini", $Name)
If Not @error Then
For $o = 1 To $Key[0][0]
$Variable = Assign(StringTrimLeft(_StringEncrypt(0, $Key[$o][0], $PW, $LV), 1), _StringEncrypt(0, $Key[$o][1], $PW, $LV))
GUICtrlSetData($Key[$o][0], $Variable)
Next
EndIf
EndFunc
Ich verstehe nicht, warum ihr hier Assign einsetzen wollt.
Der Befehl ist so abartig, dass man ihn nur dann, wenn man nicht mehr weiter weiß, nutzen sollte.
Du weißt ja in deinem Skript, wie die Variable, die du aus der INI lädst heißt. Dein Skript verwendet ja bereits intern den Namen.
Warum also nicht so:
Deine INI:
Einlesen:
Global $Variable = IniRead('INI-Datei', 'Sektion', 'Variable', 'default')
[/autoit]so geht das nicht,
hab ne funktion für speichern wo man einfach nur einen wert mitgibt
also der weg müsste schon gemacht werden, weil will das dann als udf in allen scripts nutzen
mfg
Verstehe nach wie vor nicht, wo dein Problem liegt.
Was ist denn daran universal, wenn du in einer INI den Variablennamen festlegst?
Wenn du WIRKLICH mit "variablen Variablennamen" arbeiten möchtest, wäre evtl. die Hash-Tabelle was für dich...
;----------------------------------------------------------------------
;------------------------Hash-Table------------------------------------
;----------------------------------------------------------------------
;////Hash-Table Erstellen///////////
$hash = ObjCreate("System.Collections.Hashtable")
;////Einträge hinzufügen///////////
$hash.add ("Berlin", 3395189)
$hash.add ("Hamburg", 1743627)
$hash.add ("München", 1259677)
$hash.add ("Köln", 983347)
$hash.add ("Dresden", 504795)
;Beispiel hier: Einwohnerzahl wird der jeweiligen Stadt zugeordnet.
;////Anzahl der Elemente bestimmen///////////
$Count = $hash.Count
;////Überprüft ob ein Element vorhanden ist///////////
If $hash.Contains ("Bonn") Then MsgBox(0, "", "Bonn ist eingetragen") ;Bonn ist im Bsp. nicht enthalten
;////Löscht ein Element aus der Hash-Table///////////
$hash.remove ("München")
;////Elemente aufrufen///////////
ConsoleWrite("Einwohner(Berlin): " & $hash("Berlin") & @CRLF)
ConsoleWrite("Einwohner(Dresden): " & $hash("Dresden") & @CRLF)
;////Leert die Hash-Table///////////
$hash.Clear
;----------------------------------------------------------------------
;----------------------------------------------------------------------
lg chess
ach sry
ich hab vergessen die 2 scriptausschnitte zu posten mein fehler
also so speichere ich die einstellungen
[autoit]Func _SaveSetting($Key, $Value)
IniWrite(@ScriptDir & "\" & $Name & "\" & $Name & ".ini", $Name, _StringEncrypt(1, $Key, $PW, $LV), _StringEncrypt(1, $Value, $PW, $LV))
EndFunc
und so lese ich alle wieder aus
[autoit]Func _LoadSettings()
$Key = IniReadSection(@ScriptDir & "\" & $Name & "\" & $Name & ".ini", $Name)
If Not @error Then
For $o = 1 To $Key[0][0]
GUICtrlSetData(Assign(Stringtrimleft(_StringEncrypt(0, $Key[$o][0], $PW, $LV), 1), $Key[$o][0], 1), _StringEncrypt(0, $Key[$o][1], $PW, $LV), "")
Next
EndIf
EndFunc
(funktioniert nicht)
will das dann als UDF für meine scripts nutzen, wissta?
mfg
will ja nicht stalken aber komme nicht mehr weiter..
könnte jemand sich das ma anschaun?
hier mal mit erklärung wies gemeint ist:
Func _LoadSettings()
$Key = IniReadSection(@ScriptDir & "\" & $Name & "\" & $Name & ".ini", $Name) ;beide werte auslesen
If Not @error Then ;wenn nicht leer ->
For $o = 1 To $Key[0][0] ;for schleife weils mehrere lines sind (unbekannt viele)
$a = _StringEncrypt(0, $Key[$o][0], $PW, $LV) ;hier dann die variable = $variable
$b = _StringEncrypt(0, $Key[$o][1], $PW, $LV) ;hier dann der wert = "wert"
Assign(StringTrimLeft($a, 1), "") ;hier soll die variable erstellt werden mit dem wert "" (der name der variable ist nicht bekannt)
GUICtrlSetData($a, $b) ;hier sollte eigentlich das input ($variable) mit dem wert "wert" gefüllt werden...
Next
EndIf
EndFunc
Glaube hier kapiert keiner was du eigentlich erreichen willst, warum sollte dir ja mittlerweile bekannt sein, aber lassen wir das...
Um mal zusammenzufassen was deine Schleife da macht:
1. Den Namen der neuen Variable und dessen neuer Wert aus einer ini entschlüsseln, soweit ganz toll, sofern deine encrypt Funktion richtig angewendet wird, zum testen würd ich diese crypt Kacke vllt erstmal weglassen...
2. Nun erstellst du mit assign() eine Variable mit diesem entschlüsselten Namen (vermutlich wird das ohne dritten Parameter intern per dim deklariert also innerhalb der Funktion als lokale Variable erstellt, ausser sie existiert bereits vor Aufruf global, wovon ich nicht ausgehe, die Variable ist ausserhalb dieser load Funktion also total wertlos und nicht existent), dazu weist du ihr keinen / einen leeren Wert zu --> "", spätestens hier solltest du ihr vllt eher eine ControlID zuweisen... seihe 3.
3. Danach kommt das sinnfreiste: Du tust so als ob der entschlüsselte Variablenname $a eine ID eines bestehenden Controls wäre. ($a ist aber "$variable", also nur ein String, mehr nicht)... somit wirst du wohl auch kaum irgendeinem Control etwas zuweisen können, denn du hast garkein Control erstellt und demzufolge auch guictrlsetdata nicht richtig angewendet.
Was 2. angeht siehe Hilfe, da wird der 3. funktionsparameter erklärt. Was 3. angeht erschliesst sich mir nachwievor der Sinn deiner ganzen Vorgehensweise nicht. Wurde hier denke ich auch schon erwähnt, dass es keinen Sinn macht Variablen dynamisch so zu erstellen wie du das gern haben willst. wenn man GUI's dynamisch erstellen und Werte dynamisch aus ini Dateien zuweisen will verwendet man arrays um sowohl die Controlid als auch den Wert des Controls zu speichern, alles andere macht keinen Sinn. Im Script spricht man die betreffenden Controls dann eben nicht per Variablenname an, sondern einfach per Array Index in Schleifen. Aber ohne Script wie immer sinnlos da näher darauf einzugehen...
ich habe das doch erklärt...
mir wurde dazu geraten den variablennamen (zb des inputs) und deren Wert zu speichern
um ihn dann wieder einzulesen
das waren nur versuche die nicht funktionieren können (habe ich ja herausgefunden und habe deswegen auch mein testzeugs gepostet)
weiß keiner ne lösung?
Func _LoadSettings()
$Key = IniReadSection(@ScriptDir & "\" & $Name & "\" & $Name & ".ini", $Name)
If Not @error Then
For $o = 1 To $Key[0][0]
$a = _StringEncrypt(0, $Key[$o][0], $PW, $LV)
$b = _StringEncrypt(0, $Key[$o][1], $PW, $LV)
Assign(StringTrimLeft($a, 1), $b)
$c = Eval("a")
ConsoleWrite($c & " " & $a & @CRLF)
GUICtrlSetData($a, $b)
Next
EndIf
EndFunc
mir wurde dazu geraten den variablennamen (zb des inputs) und deren Wert zu speichern
um ihn dann wieder einzulesen
Bezüglich des Variablennamens ein schlechter Rat. Mache es für jedes Skript individuell/manuell denn dieses Konzept funktioniert im Gegensatz zu deinem.
Wenn du aber aus Faulheit eine eierlegende Wollmichsau benötigst musst du dir diese schon selbst entwickeln. Oder meist du hier entwickelt einer für dich ein Konzept von dessen Sinn er nicht überzeugt ist? Vor allem da du bisher noch kein komplettes (noch nicht einmal mit Laufzeitfehlern behaftetes) Skript eingestellt hast! Gehe davon aus das andere genaus bequem sind wie du und sich keine unnötige Arbeit machen.
mfg autoBert
Alles anzeigenweiß keiner ne lösung?
Spoiler anzeigen
[autoit]Func _LoadSettings()
[/autoit]
$Key = IniReadSection(@ScriptDir & "\" & $Name & "\" & $Name & ".ini", $Name)
If Not @error Then
For $o = 1 To $Key[0][0]
$a = _StringEncrypt(0, $Key[$o][0], $PW, $LV)
$b = _StringEncrypt(0, $Key[$o][1], $PW, $LV)
Assign(StringTrimLeft($a, 1), $b)
$c = Eval("a")
ConsoleWrite($c & " " & $a & @CRLF)
GUICtrlSetData($a, $b)
Next
EndIf
EndFunc
Immernoch der selbe Fehler, siehe Punkt 3 von oben. Hier nochmal was du machst:
$a = "$test"
$b = "testwert"
$test = "testwert" ; dein assign()
; $c="$test" ; sowieso nur debugging...
guictrlsetdata("$test","testwert") ; total falsch, ein string ist keine control ID, selbst wenn du stattdessen
; die neu erstellte Variable $test verwenden würdest stünde da nur der Wert "testwert" und keine control ID
Ansonsten wie schon gesagt... sinnfreies Konzept, keine lauffähigen Testscripte --> keine besonders gute Aussichten auf Support
Dein Konzept ist aus folgenden Gründen sinnfrei:
Du kannst den Wert von Variablen nicht dynamisch mit deren Wert durch Auslesen Name/Wert speichern. Denn es gibt in AutoIt keine Möglichkeit den Namen einer Variablen auszulesen.
Also musst du in deinem Skript sowieso auf den DIR BEKANNTEN Variablennamen zugreifen. Du kannst natürlich den zugehörigen Wert in Verbindung mit dem Namen in einer INI speichern (Variablenname=Wert). Aber beim Lesen aus der INI hat Assign nichts verloren. Das Auslesen erfolgt dann nach dem Muster:
; z.B. für eine Variable $zaehler
$zaehler = IniRead($INI, 'sektion', 'zaehler', '')