Autor Beitrag
Serpentine
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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:

ausblenden volle Höhe Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 03.10.08 23:59 
ausblenden 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var S: String;
begin
  S := ListBox1.Items.Text;
  Delete(S, 118);
  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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var S: String;
begin
  S := ListBox1.Items.Text;
  Delete(S, 110);
  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:

ausblenden 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, 110);
  ListBox1.Items.Delimiter := #0;
  ListBox1.Items.DelimitedText := S;
end;


Warum verstehe ich nicht^^
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 04.10.08 12:49 
user profile iconSerpentine hat folgendes geschrieben Zum zitierten Posting springen:
Ne VOP und VOPP sind auch Nicknames die dazu gehören, aber dann kann ich das ganze ja so ändern:

Klar, das geht dann auch.

user profile iconSerpentine hat folgendes geschrieben Zum zitierten Posting springen:
und zum verändern der Einträge/löschen/hinzufügen, wie soll die Prozdur aussehen?

Da ich nicht dahinterstehe, wie die verschiedenen Trennzeichen zu Stande kommen, kann ich dir in diesem Fall leider nicht weiterhelfen. :|

user profile iconSerpentine hat folgendes geschrieben Zum zitierten Posting springen:
ich habe jetzt mal folgende Prozedur zum lesen verwendet erhalte allerdings einen Fehler:

Da haben sich zwei kleine Fehler eingeschlichen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button1Click(Sender: TObject);
var S: String;
f:textfile;
begin
  assignfile(f,'G:\Spiele\Silkroad\Setting\SRChattingBlockingList.dat');

  // Bevor du die Datei auch verwenden kannst, musst du sie öffnen
  // (AssignFile weist nur den Dateinamen zu)
  reset(f);

  Read(f,S);

  // Die folgende Zeile solltest du entfernen, da in S ja schon der Dateiinhalt steht.
  // S := ListBox1.Items.Text;

  Delete(S, 110);
  ListBox1.Items.Delimiter := #0;
  ListBox1.Items.DelimitedText := S;
end;
Serpentine Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: So 05.10.08 18:39 

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen