Jak odzczytać plik w ASCI?

0

Jak odczytać z dowolnego pliku np. jego początkowe 1024 bajty wstawiając odzczytane
bajty w ASCI do komponentu Memo.Standardowo pliki w asci odczytuje WordPad ,a komponenty
w Delphi Memo,RichEdit,RxRichEdit itp. wajchują się na 3-4 znaku pliku EXE napisanego w Delphi ,czyli zamiast
1024 znaków odczytują tylko 3-4.

Jak odzczytać chociaż 1024 znaków z dowolnego pliku?

Nie chce używać żadnych hexdumpów.

0

No nie iem czy te komponenty będą w stanie wyświetlić taką zawartość (w dodatku nie zmieniając jej). A próbowałeś zrobić pętlę i odczytywać po bajcie? :)

0

A dzieje się tak dlatego, że TMemo i jemu pochodne to otoczka na "Windowsowskiego" Edit. A ponieważ Okienka pisane są wg standardu C++, to znak o kodzie 0 kończy string.
A więc aby wczytać plik binarny, powinieneś użyć np. funkcji FileRead, wczytać żądaną liczbę bajtów. Jednak aby takie dane przenieść do Memo myślę, że należałoby pozamieniać wszystkie znaki 0 na inne - nie wiem, czy istnieje inne rozwiązanie - trzababy rzucić okiem jak to robi np. Notepad.

0

Nie to nie skutkuje.
Ani ReadBuffer ani Read ani ReadFile.

Robię tak i nic:

var
fs: TFileStream;
S: string;
begin
fs := TFileStream.Create(NazwaPliku, fmOpenread or fmShareDenyNone);
try
SetLength(S, 1024);
fs.ReadBuffer(S[1], 1024);
Result:=s;
finally
fs.Free;
end;
end;

0

Ja też nie wiem, czy mam rację, ale wydaje mi się, ze jak w notepadzie otworzysz plik exe i zapiszesz z powrotem to nic z tego nie zostanie - po prostu wyrzuci wszystkie znaki, które mu nie odpowiadają, a jak wiadomo coś takiego nie może się dorbze skończyć.

PS. Na pewno mam rację ;)

0

W demach Delphi jest program do odczytu zasobów, w nim jest takie coś jak THexDump. Wyświetla porządnie zawartość pliku, i w heksach i w ASCII.

0

oto co wymyslilem:
cenzura*********
/* m. D. ostrzega: wulgaryzmy na forum mogą być przyczyną chorób serca */

procedure TForm1.Button1Click(Sender: TObject);
type ttext = record
x : array[0..1023] of char;
end;
var
f : file;
o : ttext;
i : integer;
begin
if not opendialog1.execute then exit;
assignfile(f,opendialog1.filename);
reset(f,1);
try
blockread(f,o,sizeof(o));
except
end;
closefile(f);
for i:=0 to 1023 do
memo1.lines[0] := memo1.lines[0] + o.x[i];
end;
0

my_nick napisał:
W demach Delphi jest program do odczytu zasobów, w nim jest takie coś jak
THexDump. Wyświetla porządnie zawartość pliku, i w heksach i w ASCII.

Noob Saibot odpowiada: przecież napisałem jasno że nie chcę żadnych hexdumpów.

Co do powyższego postu dzięki,ale nadal nie jest to o co mi chodzi.

0

Moze sprawdz to(!)

//----------------NDP
VAR
SrcF : File;
RealSize : Integer; // realna odczytana wartosc z pliku
Buffer : array[0..1024] of char; // bufor przesylanych danych
TotalSize : Integer;

Procedurka -----------------

TotalSize := 0;
AssignFile(SrcF, dd);
try
{ otwieramy plik zrodlowy i okreslamy jego rozmiar }
Reset(SrcF, 1);

  Application.ProcessMessages;

  Seek(SrcF, TotalSize); // przesun na odpowiednia pozycje w pliku
{ tutaj nastepuje odczytanie 1 KB danych i przypisanie ich do bufora }
  BlockRead(SrcF, Buffer, SizeOf(Buffer), RealSize);
 Memo1.text:=buffer;
 

finally
CloseFile(SrcF);
end;

end;

Nie wiem czy dobrze cie zrozumialem :)

0

Po pierwsze też nie wczytuje to jak WordPa.
Po drugie chciałbym użyć TFileStream,a nie file.

0
Noob Saibot napisał(a)

Po pierwsze też nie wczytuje to jak WordPa.
Po drugie chciałbym użyć TFileStream,a nie file.

TMemo ma właściwość Lines typu TString, a te można wczytać z pliku za pomocą LoadFromFile lub LoadFromStream

Jeżeli w projekcie mamy komponent Memo1:TMemo i chcemy do niego wczytać zawartość pliku 'ala.txt'
to wystarczy wykonać instrukcję

Memo1.Lines.LoadFromFile('ala.txt');

Myślę, że o to chodziło.

Pozdr.

0

Ależeś wyciągnął... wątek sprzed lat siedmiu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1