Entwickler-Ecke

Dateizugriff - in Stream suchen aber wie ?


mimi - Di 16.09.03 17:39
Titel: in Stream suchen aber wie ?
Hallo,
weiß oder kennt jemmand eine unit mit der ich in Streams suchen könnte ?
bzw. eine funktion die einfach als rückgabewert die gefunden stelle hat und der man als parameter einfach sagen kann:
FindInStream(Suchtext, apos)


mimi - Fr 19.09.03 09:36

weiß keiner eine awt ?


cbs - Fr 19.09.03 10:28

huhu

ich denke mal da der Stream BYTE weise ein und ausgelesen werden kann wirds sowas nicht geben. woher weiss den die function das an stelle 5-17 ein string liegt und bei stelle 18-21 ein integer? das weisst NUR DU weil du den stream so angelegt hast. für die function könnte stelle 18-21 genausogut ein string sein. oder 4 zahlen vom typ Byte hintereinander

aber wenn du was findest würds mich auch brennend interessieren :lol:


Tana´Ri - Fr 19.09.03 10:40

FindInStream(Suchtext, apos)

man könnte doch einfach von vorne nach hinten durchsuchen, sagen wir erstmal eins bis drei Zeichen des textes, und bei erfolg dann versuchen den ganzen text einzulesen und nochmals zu vergleichen.

sowas in der richtung

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
 try
  Read(buf,3);
  if String(buf) = 'abc' then
    read(buf,textlen);
   if String(buf) = text then 
 except
 end;

oder theoretische frage wie ist wenn man den zu findenen text selbst in einen Stream schreibt um dann so zusagen den teil zu finden der mit diesem stream identisch ist ?

ps: bin grad gestiegen LEVELUP :lol: 8) :lol:

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


cbs - Fr 19.09.03 10:50

ich denke mal das problem ist das man nicht mit sicherheit sagen kann das der gefundene text auch wirklich ein text ist.

ein string 'abc' hat die dezimalwerte (laut ascii) 97 98 99

was wenn ich genau 3 zahlen vom typ byte abspeichere die genau diese werte haben. dann hab ich zwar scheinbar meinen text gefunden aber in "wirklichkeit" sind es nur 3 zahlen. oder was wenn diese kombination ein bitmap erzeugt wenn mans im stream abspeichert. außerdem müsste man jedes byte durchgehn um einen text zu finden. wenn der text bei byte 2-4 liegt ungefähr so:

byte 0-2 = 55 240 97 -> ergebniss false
byte 1-3 = 240 97 98 -> ergebniss false
byte 2-4 = 97 98 99 -> ergebniss true

ich kann also noch nichmal den gesamten stream in 3 byte schritten absuchen da ich nicht sicherstellen kann das der string auch so abgelegt ist

PS: ich denke es wird unumgänglich sein, der function FindInStream(Suchtext, apos) die struktur deines streams beizubringen. also nach dem motto:

string
string
zahl (byte)
zahl (integer)
bitmap
string

wobei vor jedem string natürlich ein integer kommt (anzahl zeichen des strings)


mimi - Fr 19.09.03 14:24

ich suche nur nach einem wort da hat 4 zeichen und zwar nach "BZh"
das steht einmal am anfang und irngewo mittendrin. nur die frage wo ?
ich habe zwei möglichkeiten:
1.ich merkie mir das was zwischen dem ersten BZh und dem zwei BZh steht und schreibe sie einfach am anfankrein.

2.ich durchsuche den Stream und fertig. ferite funktionen gehen natürlich auch *G*

und ich will das zwei machen weil das erste es unpratisch bei einem packformat.
bei mögleikeiten habe 1 nachteiel :(