Seite 1 von 2

Memory stückchenweise lesen

Verfasst: 24.12.2010 22:10
von Alnet
Hallo erstmal und fröhliche Weihnachten an alle <)
Was ich gerne wissen möchte ist wie man anhand einer Speicheradresse stückchenweise auslesen kann. Ich habe eine Datei mit Readdata() eingelesen und habe nun eine Speicheradresse in der meine Datei sich befindet. Nun frage ich mich ob es möglich ist nicht den kompletten Inhalt auszulesen sondern nur stückchenweise. Beispiel nach jedem Durchgang 1024 Bytes. Aber leider kriege ich das nicht hin. Hat jemand eine Lösung wie man die ersten 1024 Bytes liest und danach die nächsten 1024 Bytes und danach wieder die nächsten 1024 Bytes und so weiter?

Re: Memory stückchenweise lesen

Verfasst: 24.12.2010 22:26
von Thorium
Hm, ich verstehe nicht ganz was du meinst.
Willst du die Datei stückenweise in den Speicher laden oder stückchenweise auf die Daten im Speicher zugreifen?
Wenn die Datei im Speicher ist, ist sie ja eingelesen. Kein Grund sie stückchenweise woanders einzulesen.

Nutze Pointer um auf die Daten im Speicher zuzugreifen.

Erklär mal genauer was du machen willst, wie willst du die Daten verarbeiten? Dann kann ich dir ein Codebeispiel basteln.

Re: Memory stückchenweise lesen

Verfasst: 24.12.2010 22:33
von ts-soft
Ungetested, aber ungefähr so:

Code: Alles auswählen

EnableExplicit

Define *mem, length, *buffer, i

*buffer = AllocateMemory(1024)

If ReadFile(1, "test.dat")
  length = Lof(1)
  *mem = AllocateMemory(length)
  If *mem
    ReadData(1, *mem, length)
    While i < length
      CopyMemory(*mem + i, *buffer, 1024)
      ; hier der code für die 1024 byte
      i + 1024
    Wend
    FillMemory(*buffer, 1024) ; 

    CopyMemory(*mem + i, *buffer, length - i)
    ; hier die restbytes
    FreeMemory(*mem)
  EndIf
  CloseFile(1)
EndIf
Frohes Fest
Thomas

Re: Memory stückchenweise lesen

Verfasst: 24.12.2010 22:41
von Alnet
Ich habe eine Datei komplett in den Arbeitsspeicher geladen. Das ist auch so gewollt. Man kann nun mit einem Pointer auf die Daten zugreifen, aber irgendwie kann ich nicht bestimmen, wieviel und ab welcher Position ich gerne meine Daten der Datei lesen möchte. Es gibt Befehle wie PeekB(), PeekS() und so weiter, aber da kann man nur die Speicheradresse angeben aber nicht wieviele Bytes und ab welcher Position.

>Willst du die Datei stückenweise in den Speicher laden
Nein

>stückchenweise auf die Daten im Speicher zugreifen
Ja

Inhalt der Datei ist z.b. im Arbeitsspeicher folgendes: abcdefghijklmnopqrstuvwxyz0123456789

Nun möchte ich nicht den kompletten Inhalt im Arbeitsspeicher auslesen, sondern stückchenweise jede 10 Bytes:
1. abcdefghij
2. klmnopqrst
3. uvwxyz0123
4. 456789

Aber wie stelle ich das an?
Weist du jetzt was ich meine und kannst mir ein Beispielcode posten? :)

Re: Memory stückchenweise lesen

Verfasst: 24.12.2010 22:47
von ts-soft
Kannst Du meinem Beispiel entnehmen:
PeekB(*pointer + pos)

Re: Memory stückchenweise lesen

Verfasst: 24.12.2010 23:09
von Alnet
Danke :!:
Ich habe garnicht gewusst dass man bei der Speicheradresse + Position angeben kann.
Danke das wars.
~ thread is closed ~

Re: Memory stückchenweise lesen

Verfasst: 25.12.2010 02:59
von STARGÅTE
Auch wenn du dein Thema schon geschlossen hast, hier noch ein Paar Ideen:

Wenn du n Lange Zeichenkette im Speicher liegen hast, und immer genau 10Byte oder so haben willst, kannst du das auch mittels Strukture erledigen, ganz ohne Peek() und "Speichergehüpfe"

Code: Alles auswählen

Structure StringKette
  s.s{4}[0]
EndStructure

Beispiel.s = "MausBallLöweEnteGlas"
*Teil.StringKette = @Beispiel
Debug *Teil\s[0]
Debug *Teil\s[1]
Debug *Teil\s[4]
Ähnliches gilt natürlich wenn du eine Struktur in diesen 10Bytes hast, zB immer Long, Long, Word

Code: Alles auswählen

Structure Teil
  Long1.l
  Long2.l
  Word.w
EndStructure

Structure Kette
  Teil.Teil[0]
EndStructure


*Kette.Kette = AllocateMemory(1024)
*Kette\Teil[17]\Word = 123
*Kette\Teil[9]\Long1 = 123456

Debug *Kette\Teil[17]\Word 
Debug *Kette\Teil[9]\Long1 
Über das Array [] kannst du durch die Position wählen und dann direkt mittels Struktur Lesen.

Re: Memory stückchenweise lesen

Verfasst: 26.12.2010 22:18
von Blackskyliner
Gut zu wissen, sollte man auch mal in den Tipps und Tricks erwähnen :)

Re: Memory stückchenweise lesen

Verfasst: 17.04.2013 13:02
von Amor_2001
Ich habe ein ähnliches aber nicht das gleiche Problem.
Ich lade eine Binärdatei in den Speicher und möchte sie nach einer bestimmten Zeichenkette durchsuchen.
Beispiel: Die Datei ist 36000 Byte groß und wird in den Speicher geladen.
Dann möchte ich herausfinden an welche Stelle der Datei die Zeichenkette "lkooiixxxx" steht.
Findstring funktioniert hier ja nicht. Habe es dann versucht über PEEKS in einen String zu kopieren.
Leider werden (vermutlich weil Binardatei) immer nur 4 Byte in den String kopiert.

Kann mir bitte jemand einen Tipp geben.

Danke!

Re: Memory stückchenweise lesen

Verfasst: 17.04.2013 13:17
von ts-soft
Guck mal in der Hilfe unter: CompareMemoryString() (Memorylib)
Wenn Du damit nicht klar kommst, kannste ja noch mal genauer (und möglichst mit Beispielcode) nachfragen.

Gruß
Thomas