Autor |
Beitrag |
Serpentine
Hält's aus hier
Beiträge: 5
|
Verfasst: Fr 03.10.08 23:20
Hiho ich habe da eine Datei, die eine Liste von Nicknamen enthält, diese möchte ich mir ein einem Programm per TListbox anzeigen lassen, allerdings ist mir das Format der Datei unbekannt und ich weiß nicht genau wie ich dies anstellen soll. Im Netz habe ich einen Sourcecode in AutoIt gefunden, genau für diese Datei der dieses macht, allerdings kann ich ihn nicht in Delphi übersetzen =/ es wäre nett wenn jemand dies machen könnte, bei der wirte und read Prozedur, oder eine eigene schreibt! Hier der Code, die Datei werde ich anhängen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| #include <GUIConstantsEx.au3> #Include <String.au3> #Include <Array.au3>
GUICreate("Blocks", 300, 200) $list = GUICtrlCreateList("", 10, 10, 130, 180) $add = GUICtrlCreateButton("Add", 150, 10, 40) $input = GUICtrlCreateInput("NewBlock", 200, 11, 85, 23) $delete = GUICtrlCreateButton("Delete from List", 150, 50, 136) $save = GUICtrlCreateButton("Save", 150, 160, 136) GUISetState() read() Do $msg = GUIGetMsg() If $msg = $add Then $new = GUICtrlRead($input) _ArrayAdd($block, $new) GUICtrlSetData($list, "") For $i=1 To UBound($block)-1 GUICtrlSetData($list, $block[$i]) Next EndIf If $msg = $delete Then $selected = GUICtrlRead($list) $number = _ArraySearch($block, $selected, 0, 0, 0, 1) _ArrayDelete($block, $number) GUICtrlSetData($list, "") For $i=1 To UBound($block)-1 GUICtrlSetData($list, $block[$i]) Next EndIf If $msg = $save Then write() EndIf Until $msg = $GUI_EVENT_CLOSE
Func read() $file = FileOpen(@ScriptDir&"\Setting\SRChattingBlockingList.dat", 4) $start = FileRead($file, 4) $number = Dec(StringTrimLeft(String(FileRead($file, 1)), 2)) $shit = FileRead($file, 3) Global $block[$number+1] For $i=1 To $number $chars = Dec(StringTrimLeft(String(FileRead($file, 1)), 2)) $block[$i] = _HexToString(StringTrimLeft(String(FileRead($file, $chars)), 2)) GUICtrlSetData($list, $block[$i]) Next FileClose($file) EndFunc
Func write() $file = FileOpen(@ScriptDir&"\Setting\SRChattingBlockingList.dat", 18) FileWrite($file, 0x1) FileWrite($file, UBound($block)-1) For $i=1 To UBound($block)-1 FileWrite($file, BinaryMid("0x"&Hex(StringLen($block[$i])),4,4)) FileWrite($file, $block[$i]) Next FileClose($file) EndFunc |
Danke 
Einloggen, um Attachments anzusehen!
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Fr 03.10.08 23:59
Inhalt der Datei: 1:
| .........VOP.VOPP.Liingling.Venusxiaomei.diemkbn.snow_snuck.twetery.lllIIIII.farkiewe.He_Mat.bobo003.Veleni.wowowow.MISSCUI.uawoijasojfo.sgfwrt.loveuloveu.YVY444.Venusyun.dfdfwad |
(Die Punkte stellen nicht darstellbare Zeichen dar)
Kann man davon ausgehen, dass die Datei immer mit ".........VOP.VOPP." anfängt, und anschließend die Namen aufgelistet sind, mit einem nicht darstellbaren Zeichen als Trennzeichen? Dann könntest du das so machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var S: String; begin S := ListBox1.Items.Text; Delete(S, 1, 18); ListBox1.Items.Delimiter := #0; ListBox1.Items.DelimitedText := S; end; |
Eine kleine Hürde ist die, dass das Trennzeichen nicht immer gleich ist. Du könntest es aber mal so probieren. Bei mir klappt das ganze, wenn ich die Datei über den Windows Editor lade, und in Delphi einfüge.
|
|
Serpentine 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 04.10.08 01:05
Ne VOP und VOPP sind auch Nicknames die dazu gehören, aber dann kann ich das ganze ja so ändern:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var S: String; begin S := ListBox1.Items.Text; Delete(S, 1, 10); ListBox1.Items.Delimiter := #0; ListBox1.Items.DelimitedText := S; end; |
und zum verändern der Einträge/löschen/hinzufügen, wie soll die Prozdur aussehen?
ich habe jetzt mal folgende Prozedur zum lesen verwendet erhalte allerdings einen Fehler:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button1Click(Sender: TObject); var S: String; f:textfile; begin assignfile(f,'G:\Spiele\Silkroad\Setting\SRChattingBlockingList.dat'); Read(f,S); S := ListBox1.Items.Text; Delete(S, 1, 10); ListBox1.Items.Delimiter := #0; ListBox1.Items.DelimitedText := S; end; |
Warum verstehe ich nicht^^
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Sa 04.10.08 12:49
|
|
Serpentine 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 04.10.08 13:43
Dummer Fehler^^ ist mir auch schon aufgefallen *kopf->tisch* aber danke für deine Hilfe!
Anhand des AutoIt Quelltextes müsste sich doch die Funktionsweise der Trennzeichen zu erkennen seien, kann diesen nicht jemand in Delphi übersetzen, habe das selber schon ein wenig versucht komme mit AutoIt aber garnicht zurecht.
Wozu ich das ganze benutzen will ist, dass ich eine Liste in Form einer *.txt auf meienm Server habe, in die ich immer eine Liste von Spambots eintrage, und dafür will ich dann einen Client schreiben, der diese Liste in die vorliegende .dat überträgt. Das klappt auch alles soweit, nur soll er eine komplett neue .dat erstellen und die alte dadurch ersetzen, und an dem Format der .dat und den Trennzeichen hakt es dann jetzt noch.
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: So 05.10.08 18:39
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
|