Obsługa txt powyrzej 64kb

0

Słyszałem że delphi nie obsługuje plików tekstowych większych od 64kb. Czy to prawda i czy można to obejść gdyż potrzebuje obsługiwac duże pliki tekstowe(ok 1mb)

0

RichEdit sobie radzi z większymi plikami. Możesz go €zyć do obsługi plików txt (PlainText właściwość zaznaczasz).

0

próbowałem ale nie wkleja mi całego tekstu.

  AssignFile(TF, 'D:\main1.txt');
  Reset(TF);
  while not eof(TF) do
  begin
    Readln(TF, S);
    richedit1.Lines.add(S);
  end;
  CloseFile(TF);
0

następny inteligętny ...

kto Was uczy takich rzeczy????

richedit.Lines.LoadFromFile('d:\main1.txt');

0

i tak sie nie zgadza:P

0
pinokio999 napisał(a)

i tak sie nie zgadza:P

:| Co się nie zgadza?

Wracając do 64kB. To było dawno temu w pascalu, bo tyle miał segment danych. W OPascal ten problem stracił na znaczeniu.

0

Tzn jak mam jakiś wielkaśny plik txt i go otwieram w richedit to widze że tekstu w richedit jest mniej nż w pliku

0

sprawdzasz na oko, czy liczysz ręcznie znaki??

Jak chcesz uzyskać jakąkolwiek pomoc to przestań pieprzyć, że nie działa tylko podaj jakieś konkrety

0

Misiekd ostro ostatnio jedziesz :-[ . W każdym razie chodzi o fakt, że otwierając plik exe notatnikiem widzimy kilkaset linijek Bóg wie czego, a ładując ten sam plik do richedit albo memo widać tylko 3 znaki.

0

dobra. Robie ten program tylko w moim wiadomym celu więc nie czepiajcie się po co robie takie pierdoły.

procedure TForm1.OpenDialog2SelectionChange(Sender: TObject);
begin
Edit1.Text:=OpenDialog1.FileName;  //wybieram plik z rozszerzeniem exe
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
CopyFile(PAnsiChar(Edit1.Text), 'D:\main1.txt', False);  //i zamieniam ten plik na txt
richedit1.Lines.LoadFromFile('d:\main1.txt');
end;

I teraz uruchamiam program i kopiuje zawartość richedita do worda i liczy mi znaki. Potem wklejam text z notatnika (ten sam plik) do worda i widze że oryginalnie plik ma duuużo więcej znaków. Ustawiłem PlainText na true ale to nic nie dalo. Teraz jasne?
Jeszcze do tego co napisał poprzedni pan po poprawkach które mi zaproponowaliście wychodzi więcej znaków. Dużo więcej ale i tak nie all. Przy moich 1 próbach wychodziły tylko 3 pierwsze.

0
pinokio999 napisał(a)

dobra. Robie ten program tylko w moim wiadomym celu więc nie czepiajcie się po co robie takie pierdoły.

procedure TForm1.OpenDialog2SelectionChange(Sender: TObject);
begin
Edit1.Text:=OpenDialog1.FileName;  //wybieram plik z rozszerzeniem exe
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
CopyFile(PAnsiChar(Edit1.Text), 'D:\main1.txt', False);  //i zamieniam ten plik na txt
richedit1.Lines.LoadFromFile('d:\main1.txt');
end;

LOL. W ten sposób nie zmienisz zawartości pliku, tylko rozszerzenie. Pliki exe to pliki binarne, których nie sposób wczytać "tak po prostu" do Memo/RichEdit. I uwierz mi - notatnik też wyświetla błędną zawartość pliku.

{EDIT}

Ile razy ten temat był poruszany na forum? Chyba i tak za mało...

0

dobra już dajmy sobie all spokuj...

0
WIktorDelphi napisał(a)

Misiekd ostro ostatnio jedziesz :-[ .

bo ileż można o dupie marynie rozmawiać jak pytający raczy nas lakonicznymi wypowiedziami i ma pretensje, że nasze odpowiedzi mu nie działają?? Może się to w końcu znudzić każdemu.

W każdym razie chodzi o fakt, że otwierając plik exe notatnikiem widzimy kilkaset linijek Bóg wie czego, a ładując ten sam plik do richedit albo memo widać tylko 3 znaki.

Wystarczyło, żeby w pierwszym poście napisał, że chodzi o pliki binarne a nie "plików <font size="4">tekstowych</span> większych"

Dość, że nie pisze prawdy to jeszcze pretensje potem ma a my jak te debile musimy się domyślać o co naprawdę chodzi ...

0

Na temat:
Znakiem końca pliku TXT jest znak [ctrl]+z. W pliku binarnym taka kombinacja może trafić się gdziekolwiek. W plikach binarnych tego nie ma. To programista ma za zadanie wiedzieć ile bajtów odczytać. Dla całego pliku to BlockRead(Plik, Bufor, FileSize(Plik)). Dla txt mam while not Eof(Plik) gdzie Eof zwraca true po wczytaniu Ctrl+Z.

Off-topic:
WiktorDelphi nie ma co czarować, że jest na tym forum kupa darmozjadów, lolów, leserów. Są też którym zależy. Przeleć sobie na wyrywki i popatrz, które posty dostają zjebkę. Programowanie jest dziedziną gdzie trzeba wykazać się wytrwałością, precyzją sprytem, pomysłowością. Konkrety. Szybkie pytanie - szybka odpowiedź. Często posty wloką się na 13 stron, bo autor coś che. Traktujmy to forum jak kompilator. Brak przecinka - syntax error - i co powiem, że kompilator ostro jedzie?

0
Oleksy_Adam napisał(a)

WiktorDelphi nie ma co czarować, że jest na tym forum kupa darmozjadów, lolów, leserów. Są też którym zależy. Przeleć sobie na wyrywki i popatrz, które posty dostają zjebkę. Programowanie jest dziedziną gdzie trzeba wykazać się wytrwałością, precyzją sprytem, pomysłowością. Konkrety. Szybkie pytanie - szybka odpowiedź. Często posty wloką się na 13 stron, bo autor coś che. Traktujmy to forum jak kompilator. Brak przecinka - syntax error - i co powiem, że kompilator ostro jedzie?

Masz racje, i przepraszam. Po prostu jestem dohjść początkującym programista i czesto nazywam rzeczy nie po imieniu. Moja wina.

0

poczytaj sobie o TFileStream

0

Bo chciałem taki binder zoribć: Wczytuje zawartość plików dodaje do wczesniej zrobionego programu text na końcu potem ten 2 program wczytuje co ma dopisane i robi z tego programy. Ale jednak to nie wyjdzie...

//temat close

0

Nie wiem czy Ci się to przyda ?
Ja kiedyś użyłem SynEdita do wczytywania pliku exe i ponownego jego zapisu

VAR  Tekst  :String;  //globalna

FUNCTION OtworzPlik(NazwaPliku:String; var Dane:String):BOOLEAN;
var
 plik :file of Char;
 size :Cardinal;
Begin
 Result:= False;
 try
   AssignFile(plik,NazwaPliku);                              
   Reset(plik);                                       
   size:= FileSize(plik);           
   SetLength(Dane,size);                             
   BlockRead(plik,Dane[1],size);   //pobierasz dane z pliku         
   CloseFile(plik);                                              
   Result:= True;
 except
 end;
End;

FUNCTION ZapiszPlik(NazwaPliku:String; Dane:String):BOOLEAN;
var
 plik :file of Char;
 size :Cardinal;
Begin
 Result:= False;
 try
   AssignFile(plik,NazwaPliku);                               
   Rewrite(plik);                         
   size:= Length(Dane);          
   SetLength(Dane,size);                            
   BlockWrite(plik,Dane[1],size);          //zapisujesz dane do pliku
   CloseFile(plik);                                               
   Result:= True;
 except
 end;
End;

{tu sobie podglądasz co zawiera plik exe - w tej procedurze masz wiele możliwości, możesz dopisać instrukcje np. szyfrujące plik. Oczywiście musisz operować na strumieniu}
PROCEDURE TForm1.btnOtworzPlikClick(Sender: TObject);
var
 stream	:TStringStream;
Begin
 if OpenDialog1.Execute then
 if OtworzPlik(OpenDialog1.FileName,tekst) then
 begin
   stream:= TStringStream.Create('');
   stream.WriteString();                      //zapisuje dane w strumieniu
   //wczytuje strumień do edytora...
   SynEdit1.ClearAll;
   SynEdit1.Lines.LoadFromStream(stream);
   stream.Free;
 end;
End; 
//..i zapisujesz gdy już się napatrzysz :) możesz jako tekst ale i tak będzie to exe
procedure TForm1.btnZapiszPlikClick(Sender: TObject);
Begin
 if SaveDialog1.Execute then
 begin
   ZapiszPlik(SaveDialog1.FileName,Tekst);
 end;
End; 
0

zamień linijkę w TForm1.btnOtworzPlikClick(Sender: TObject); na:

stream.WriteString(Tekst);                      //zapisuje dane w strumieniu

Przy wysyłaniu wkradł mi się błąd :P

0

A wie ktoś jak zrobić bindera? coś słyszałem o UpdateResources ale nie wiem oco chodzi dokłądnie...

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