|
You last visited: Today at 04:43
Advertisement
Tratsch rund um Autoit / Autoit Talk | kleinere Fragen
Discussion on Tratsch rund um Autoit / Autoit Talk | kleinere Fragen within the AutoIt forum part of the Coders Den category.
07/04/2012, 16:37
|
#271
|
elite*gold: 124
Join Date: Dec 2009
Posts: 2,114
Received Thanks: 3,142
|
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
|
#272
|
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
|
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
|
#273
|
elite*gold: 26
Join Date: Jan 2012
Posts: 3,474
Received Thanks: 18,844
|
Quote:
Originally Posted by Lawliet!
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
|
#274
|
elite*gold: 124
Join Date: Dec 2009
Posts: 2,114
Received Thanks: 3,142
|
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:
Code:
$itemfile = FileOpen("ItemsAll.ini")
$curid = 0
Dim $iitemarray[10000][10]
While 1
$line = FileReadLine($itemfile)
If @error Then
FileClose($itemfile)
ExitLoop
EndIf
If StringLeft($line, 1) = "[" Then
Global $curid = StringTrimRight(StringTrimLeft($line, 1), 1)
ElseIf StringLeft($line, 4) = "Name" Then
$iitemarray[$curid][1] = StringTrimLeft($line, 5)
ElseIf StringLeft($line, 11) = "Description" Then
$iitemarray[$curid][2] = StringTrimLeft($line, 12)
ElseIf StringLeft($line, 3) = "Lvl" Then
$iitemarray[$curid][3] = StringTrimLeft($line, 4)
ElseIf StringLeft($line, 3) = "Job" Then
$iitemarray[$curid][4] = StringTrimLeft($line, 4)
ElseIf StringLeft($line, 6) = "Weight" Then
$iitemarray[$curid][5] = StringTrimLeft($line, 7)
ElseIf StringLeft($line, 4) = "Flag" Then
$iitemarray[$curid][6] = StringTrimLeft($line, 5)
ElseIf StringLeft($line, 4) = "Type" Then
$iitemarray[$curid][7] = StringTrimLeft($line, 5)
ElseIf StringLeft($line, 7) = "Subtype" Then
$iitemarray[$curid][8] = StringTrimLeft($line, 8)
ElseIf StringLeft($line, 5) = "Price" Then
$iitemarray[$curid][9] = StringTrimLeft($line, 6)
EndIf
WEnd
Zum Verständnis - so ist meine .ini aufgebaut:
Quote:
[id]
Name=
Description=
Lvl=
Job=
Weight=
Flag=
Type=
Subtype=
Price=
|
|
|
|
07/05/2012, 13:28
|
#275
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
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
|
#276
|
elite*gold: 124
Join Date: Dec 2009
Posts: 2,114
Received Thanks: 3,142
|
So mache ich es jetzt.
Dauert ca. 160ms für etwa 100k Zeilen.
|
|
|
07/08/2012, 22:03
|
#277
|
ベトナム警察
elite*gold: 0
Join Date: Jan 2012
Posts: 16,497
Received Thanks: 3,524
|
Weiß jemand, wie ich mit WinHttp die Treasures auslesen kann? o:
Es geht auch IE oder Inet what ever.
|
|
|
07/09/2012, 09:26
|
#278
|
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
|
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
|
#279
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by Lawliet!
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
|
#280
|
elite*gold: 224
Join Date: Dec 2010
Posts: 2,766
Received Thanks: 931
|
Huhu ,
wie kann ich den Text einer Spalte eines ListViewItems ändern?
|
|
|
07/09/2012, 12:57
|
#281
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by Alex_II
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
|
#282
|
elite*gold: 224
Join Date: Dec 2010
Posts: 2,766
Received Thanks: 931
|
Quote:
Originally Posted by lolkop
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
|
#283
|
elite*gold: 574
Join Date: Nov 2010
Posts: 2,498
Received Thanks: 726
|
Quote:
|
_GUICtrlListView_SetItemText($ListView,$iIndex,$sT ext)
|
|
|
|
07/09/2012, 17:31
|
#284
|
elite*gold: 224
Join Date: Dec 2010
Posts: 2,766
Received Thanks: 931
|
Quote:
Originally Posted by Njahs
|
Perfekt , danke
|
|
|
07/09/2012, 17:53
|
#285
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by Alex_II
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...:
Code:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Example()
Func Example()
Local $listview, $button, $item1, $item2, $item3, $msg
GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
GUISetBkColor(0x00E0FFFF) ; will change background color
$listview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
$button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
$item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview)
$item2 = GUICtrlCreateListViewItem("............item1|col12|col13", $listview)
$item3 = GUICtrlCreateListViewItem("item3|col32|col33", $listview)
GUICtrlCreateInput("", 20, 200, 150)
GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
GUISetState()
GUICtrlSetData($item2, "|ITEM1")
GUICtrlSetData($item3, "||COL33")
GUICtrlDelete($item1)
Do
$msg = GUIGetMsg()
Select
Case $msg = $button
MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)
Case $msg = $listview
MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)
EndSelect
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example
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:
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...
|
|
|
Similar Threads
|
[Sammelthread]Fragen zu Autoit wie man Hacks herstellt(Autoit) + Antworten
11/16/2011 - Metin2 - 0 Replies
Hallo Liebe Community,
Ich habe diesen Thread aufgemacht weil manche leute mit Autoit nicht mehr weiterkommen wie man Hack herstellt ,ich habe mit schon ein Multihack mit Autoit herstellt das war einfach .Da viele User nicht weiterkommen werden habe ich mich entschieden ein Thread aufzumachen mit Fragen und ich den dann Antworten kann und helfen kann!
------------------------------------------------- ---------------------------
Mein Multihack:...
|
All times are GMT +1. The time now is 04:44.
|
|