AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ich versteh den Blockreadbefehl nicht :(
Thema durchsuchen
Ansicht
Themen-Optionen

Ich versteh den Blockreadbefehl nicht :(

Ein Thema von xy124 · begonnen am 12. Feb 2008 · letzter Beitrag vom 12. Feb 2008
Antwort Antwort
Seite 1 von 2  1 2      
xy124

Registriert seit: 3. Dez 2007
146 Beiträge
 
Delphi 7 Personal
 
#1

Ich versteh den Blockreadbefehl nicht :(

  Alt 12. Feb 2008, 13:30
Kann mir den jemand erklären (die Delphi hilfe dazu ist d.o.o.f und im internet findet sich auch nix wirklich gutes dazu ), wie das mit Blockread und Blockwrite funktioniert?

Also bei mir sieht es jetzt folgendermaßen aus:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var f: file;
    arr: array[0..100] of integer;
    i: Integer;
begin
  AssignFile(f,'mmm.txt'); //öffnen der datei wenn ich das richtig verstehe!

  Reset(f,1); //das macht die datei wahrscheinlich zum lesen fertig, oder?

  BlockRead(f,arr[0],99); // was bedeutet der 2. parameter? - da ist ein array und der schreibt die datei in den 0ten speicherplatz
  //aber irgentwie macht der pc doch in dem array weiter?
  //und der 3. parameter zeigt bis wohin er lesen soll, wenn ich die delphihilfe richtig deute?
  //die ganze datei soll gelesen werden - wie bekomme ich die länge raus? geht das mit length(f) ?

  CloseFile(f); //das ist klar

  for i := 0 to {ja woher weis ich jetzt wie lang meine Datei ist? } do
    memo1.Lines.Add(inttostr(arr[i]));
  //so und irgentwie will ich ja auch noch sehen was er für zahlen liest!
end;
also ich hoffe ihr könnt mir helfen!
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Ich versteh den Blockreadbefehl nicht :(

  Alt 12. Feb 2008, 13:43
Zitat:
BlockRead(f,arr[0],99); // was bedeutet der 2. parameter? - da ist ein array und der schreibt die datei in den 0ten speicherplatz
1. Paramter das FileHandle, damit sprichst Du die Datei an
2. Parameter eine Buffer in diesem Fall Dein Array
3. Count, die Anzahl der Zeichen die mit einem Blockread Befehl eingelesen werden.

BlockRead(f,arr,101); So würde Dein Array 0..100 gefüllt werden.
Willst Du die ganze Datei lesen, mußt Du Blockread öfter in einer Schleife ausführen.

Noch eine Frage zum Abschluß, warum willst Du die Datei so einlesen?
Willst Du den Befehl Blockread kennenlernen, oder hat es einen tieferen Sinn?
Vielleicht gibt es ja eine bessere Lösung für Dein Problem.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#3

Re: Ich versteh den Blockreadbefehl nicht :(

  Alt 12. Feb 2008, 14:32
in einem Array liegen die einzelnen Elemente im Speicher direkt hintereinander3
also wenn man bei ersten element anfängt was zu lesen/schreiben und weitermacht, dann erwischt man auch die nachfolgenden Elemente.


arr: array[0..100] of integer; ist ein statisches Array, also würde hier
BlockRead(f,arr,100); und BlockRead(f,arr[0],100); auf's Selbe hinausgehn

Allerdings ist bei einem dynamischem array (z.B. arr: array of integer; ) an der Speicherstelle von arr / @arr nur der Zeiger auf den Speicherplatz des Arrays,
somit würde.

arr[0] / @arr[0] zeigen hier aber beim dynamischen array nicht auf den Zeiger zum Array, sondern direkt auf das erste Element und demnach hier auch mit auf die nachfolgenden 99 Elemente.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
xy124

Registriert seit: 3. Dez 2007
146 Beiträge
 
Delphi 7 Personal
 
#4

Re: Ich versteh den Blockreadbefehl nicht :(

  Alt 12. Feb 2008, 14:47
ich will beides! den blockread-Befehl find ich interessant, weil ich z.B. noch nie mit buffern gearbeitet habe und ich möchte auch ein programm schreiben, was eine delphi unit erstellt, indem es eine Datei mit blockread einliest und dann in der Unit eine prozedur erstellt die das ganze eingelesene dann wieder speichert(blockwrite)! so kann man komfortabel irgentwelche dateien mit compilieren! und bei bedarf extrahieren

also danke für eure Hilfe

der befehl gibt dann also z.B. bei einer Textdatei in dem Array die zahlen für die Zeichen aus, vom anfang bis zum z.B. 101. zeichen!

um zur problematik mit der dateilänge zu kommen - da wäre dann wohl sowas angebracht:

Delphi-Quellcode:
var i: Integer;
    wert: Array[0..1000] of Byte;
    weiter: Boolean;
    f: file;
begin
  i := 0;
  AssignFile(f,'mmm.lol'); //öffnen der datei wenn ich das richtig verstehe!

  Reset(f,1); //das macht die datei wahrscheinlich zum lesen fertig, oder?

  weiter := true;
  while weiter = true do
    begin
      i := i + 1;
      try
        Blockread(f, wert,i); // da überschreibt er dann immer wieder biss es nicht mehr geht
        memo1.Lines.Add(inttostr(wert[i]));
      except
        weiter := false;
      end;
    end;
  CloseFile(f);
  form1.Caption := inttostr(i)
end;
in meiner datei steht folgendes:

sdm, v hkblsd n.sdn uübse l-.we
w3.menp weö
erö wei wq r

aber im Memo geht es nur bis zeile 11 (eigentlich nur bis 10 aber der macht noch nen Absatz) es sind doch aber vielmehr zeichen!
^^Warum liest er nur 11 bytes?
im Memo steht folgendes:
113
32
114
246
32
119
101
105
32
4



mal ganz abgesehen davon, das er über das dateiende hinaus liest!(diese Fehlermeldung ist mir erstmal egal)

ich hab's noch mal probiert mit der Textdatei in der nur "Hallo" steht

im memo sind nur 2 (nicht 4) Zeilen:
72
97

^^das sieht ja schon nach dem Zeichen code aus! aber warum sind das nur die ersten 2 Zeichen?
o o
LJ
TTT
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#5

Re: Ich versteh den Blockreadbefehl nicht :(

  Alt 12. Feb 2008, 14:52
Wenn es sich um eine reine Textdatei handelt, ist es besser, entweder die Datei in eine TStringList zu laden oder mit ReadLn zu arbeiten.
  Mit Zitat antworten Zitat
iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#6

Re: Ich versteh den Blockreadbefehl nicht :(

  Alt 12. Feb 2008, 14:54
Musst Du vielleicht einfach scrollen? Aktiviere die Scrollbars für Dein Memo.
(klingt vielleicht dümmlich, aber mir ist sowas auch schon passiert)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Ich versteh den Blockreadbefehl nicht :(

  Alt 12. Feb 2008, 14:55
Hallo,

ein Datei komplett einlesen kann man so:

Delphi-Quellcode:
while not eof(f) do
begin
  blockread(f,arr,1000); //hier liest Du 1000 Zeichen ein
  for i:=low(arr) to high(arr) do
    memo1.lines.add(IntToStr(arr[i]));
end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
xy124

Registriert seit: 3. Dez 2007
146 Beiträge
 
Delphi 7 Personal
 
#8

Re: Ich versteh den Blockreadbefehl nicht :(

  Alt 12. Feb 2008, 14:56
Zitat von Nuclear-Ping:
Wenn es sich um eine reine Textdatei handelt, ist es besser, entweder die Datei in eine TStringList zu laden oder mit ReadLn zu arbeiten.
es ist (leider) nur in dem Beispiel ne Textdatei gewesen!

@Klaus01: so kommt gleich am anfang die Fehlermeldung mit dem Dateiende!

@iGoA hab ich aktiviert - ändert nix!
o o
LJ
TTT
  Mit Zitat antworten Zitat
em-sigma

Registriert seit: 8. Jul 2004
40 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Ich versteh den Blockreadbefehl nicht :(

  Alt 12. Feb 2008, 15:02
Versuchs mal mit

Blockread(f, wert[i], 1);
Allen ist das Denken erlaubt. Vielen bleibt es erspart. (Curt Goetz)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Ich versteh den Blockreadbefehl nicht :(

  Alt 12. Feb 2008, 15:04
Zitat von xy124:
so kann man komfortabel irgentwelche dateien mit compilieren! und bei bedarf extrahieren
Ich bin mir nicht sicher, was du vorhast, aber es klingt komisch.

Du musst dir erstmal überlegen, in welches Format du einlesen willst. Warum nimmst du ein Array of integer? Eine untypisierte Datei wurde (früher) eben genau deswegen verwendet, weil man Werte unterschiedlichen Types abgespeichert hat. Ansonsten hat man schon immer typisierte Dateien (oder Texdateien) verwendet.

btw: Buffer gibt es auch bei TFileStream und der ist allemal besser als eine untypisierte Datei.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz