Jak odzczytać plik w ASCI?

Jak odzczytać plik w ASCI?
Noob Saibot
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 121
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.

ikari
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 381
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? :)

Marooned
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
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.

Noob Saibot
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 121
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;

ikari
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 381
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ę ;)

MN
  • Rejestracja: dni
  • Ostatnio: dni
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.

ZI
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
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;
Noob Saibot
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 121
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.

WIDMO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 159
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 :)

Noob Saibot
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 121
0

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

  • Rejestracja: dni
  • Ostatnio: dni
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.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.