Tratsch rund um Autoit / Autoit Talk | kleinere Fragen

07/04/2012 16:37 -STORM-#271
Gibt es im Bezug auf Geschwindigkeit bessere Möglichkeiten zur Datenverwaltung als .ini Datein?
Habe gerade ein Skript, das ca. 10.000 Items aus einer Spieledatei ausliest und diese dann in einer .ini speichert. Das dauert allerdings ziemlich lange (liegt nicht am auslesen, sonder am schreiben - getestet per TimerDiff!).
Gäbe es da Alternativen, die merkbar schneller wären, und wenn ja, welche ist die sinnvollste/schnellste?
Was mir spontan einfallen würde, wären .xml und .sql, sicherlich gibt es noch mehr. Habe aber keine Ahnung, wie es da mit der Geschwindigkeit aussieht.
07/04/2012 23:27 Lawliet#272
Naja, Ini daten sind pure "Dokumente" wie *.txt Daten. Also ohne codierung o.ä, also glaube ich nicht, dass es auf diesem Weg eine schnellere Möglichkeit gibt. Könnte sein, das Registry Einträge schneller sein könnten.
07/05/2012 11:47 K1ramoX#273
Quote:
Originally Posted by Lawliet! View Post
Naja, Ini daten sind pure "Dokumente" wie *.txt Daten. Also ohne codierung o.ä, also glaube ich nicht, dass es auf diesem Weg eine schnellere Möglichkeit gibt. Könnte sein, das Registry Einträge schneller sein könnten.
Von der Registrierung würde ich abraten da es so zu Systemgeschwindigkeits Verlust kommt, denn er schreibt ja von vielen Items.

Wie wär es, wenn du deine Items mit einem speziellen Algorithmus ausstattest? Sprich, sie verschlüsselst und eine spezielle Einleseroutine machst? Dann brauchst du nicht die Ini Funktionen sondern die normalen File Funktionen. Weiß nicht ob es schneller ist ;D
07/05/2012 12:43 -STORM-#274
Registry kommt für mich nicht in Frage.
Ich glaube, mit meinen AutoIt Kenntnissen ist da das Risiko zu hoch, irgendwas zu zerschießen.

Was meinst du mit dem Algorithmus?
Das mit der normalen File Funktion verstehe ich so, dass ich statt Ini Read FileReadLine nehmen würde und dann mit einer For Schleife die Items einlese.

Das könnte tatsächlich etwas bringen, da mit IniRead ja erst die Ini bis zum auszulesenden Wert durchsucht werden muss, was sicherlich auch Zeit kostet.

Werde gleich mal versuchen, ob ich das mit meinem Skript hinkriege.



Edit:
Funktioniert schon ziemlich schnell. 10k Sektionen mit je 9 Keys werden jetzt in ca. 1,3sek ausgelesen und in einem Array gespeichert.
So sieht das Skript aus:
Zum Verständnis - so ist meine .ini aufgebaut:
07/05/2012 13:28 lolkop#275
arbeite mit datenarrays. damit sollte es möglich sein binnen weniger millesekunden viele millionen datensätze einzulesen, bzw zu speichern.

speichern kannst du das ganze dann einfach in einer schleife mit $data[$i]&@LF, einlesen mit
Code:
$data = StringSplit(FileRead('file'), @LF)
ob du nun $name oder $data[5] in deinem quellcode verwendest, sollte keinen unterschied machen.

gerade bei größeren datenmengen macht es ohnehin sinn mit geordneten arrays zu arbeiten, da man diese falls notwendig auch schnell mit schleifen abarbeiten kann.
07/05/2012 15:25 -STORM-#276
So mache ich es jetzt.
Dauert ca. 160ms für etwa 100k Zeilen.
07/08/2012 22:03 Lumi#277
Weiß jemand, wie ich mit WinHttp die Treasures auslesen kann? o:
Es geht auch IE oder Inet what ever. :D
07/09/2012 09:26 Lawliet#278
Naja, das sollte mit StringRegEx ziemlich einfach gehen:
Code:
Titel:	....
Verkäufer:	Lawliet!
Käufer:	xxxyu
Preis:	4 eg


TREASURE INHALT
xxxxxxx
Also im Html Code einfach je einen Ausdruck für jeden der 5 Teile.
Mit _StringBetween sollte es aber auch gehen.
07/09/2012 09:45 lolkop#279
Quote:
Originally Posted by Lawliet! View Post
Naja, das sollte mit StringRegEx ziemlich einfach gehen:
Code:
Titel:	....
Verkäufer:	Lawliet!
Käufer:	xxxyu
Preis:	4 eg


TREASURE INHALT
xxxxxxx
Also im Html Code einfach je einen Ausdruck für jeden der 5 Teile.
Mit _StringBetween sollte es aber auch gehen.
wenn die gesuchten teile immer in dieser reihenfolge auftreten, kann das ganze auch sehr schön mit einem ausdruck abgearbeitet werden =)
07/09/2012 09:56 Havelock_Vetinari#280
Huhu ,
wie kann ich den Text einer Spalte eines ListViewItems ändern?
07/09/2012 12:57 lolkop#281
Quote:
Originally Posted by Alex_II View Post
Huhu ,
wie kann ich den Text einer Spalte eines ListViewItems ändern?
ein einfaches drücken von F1 in scite, mit gefolgter suche von GuiCtrlCreateListViewItem sollte deine frage beantworten...
07/09/2012 16:39 Havelock_Vetinari#282
Quote:
Originally Posted by lolkop View Post
ein einfaches drücken von F1 in scite, mit gefolgter suche von GuiCtrlCreateListViewItem sollte deine frage beantworten...
ich möchte aber kein neues item erstellen..... ich möchte den text einer Spalte eines vorhandenen items verändern , ohne das Item zu löschen oder den text der anderen Spalten zu ändern....
Also Quasi so :
erzeugen eines ListViews :
Code:
$ListView1 = GUICtrlCreateListView("Spalte1|Spalte2|...",100,100)
danach werden aus einer .CFG Datei daten ausgelesen und so in einer for - Schleife neue ListView Einträge erstellt..... :

Code:
For $i = 1 To $for Step 1


	GUICtrlCreateListViewItem(erstelle einträge mit daten aus .CFG datei...)
Next
d.h. ich habe keine variable die ich zum ändern benutzen kann , gibt es trotzdem einen weg?
07/09/2012 17:24 Njahs#283
Quote:
_GUICtrlListView_SetItemText($ListView,$iIndex,$sT ext)
[Only registered and activated users can see links. Click Here To Register...]
07/09/2012 17:31 Havelock_Vetinari#284
Quote:
Originally Posted by Njahs View Post
[Only registered and activated users can see links. Click Here To Register...]
Perfekt , danke :)
07/09/2012 17:53 lolkop#285
Quote:
Originally Posted by Alex_II View Post
ich möchte aber kein neues item erstellen..... ich möchte den text einer Spalte eines vorhandenen items verändern , ohne das Item zu löschen oder den text der anderen Spalten zu ändern....
hättest du dir die hilfe auch nur einmal angeschaut, hättest du folgendes beispiel gesehehn...:

womit klar wird:
Code:
GUICtrlSetData($listViewItem, "||x")
lässt spalte 1 und 2 unberührt, und ändert spalte 3 auf x.

hast du folgendes listview:
Code:
"0|1|2|3|4|5|6"
kannst du mit "||5" zb die 2 in eine 5 ändern, oder mit "|||||15" die 5 in eine 15 ändern...

ergo wird nicht mehr als ein normales GUICtrlSetData für deine problemlösung benötigt...