Normalnie plik wczytujemy tak:
var
TF : TextFile;
S : String;
begin
if not FileExists('C:\plik.txt') then
ShowMessage('Sry, plik nie istnieje :/')
else
begin
AssignFile(TF, 'C:\plik.txt');
Reset(TF);
while not eof(TF) do
begin
Readln(TF, S);
ListBox1.Items.Add(S);
end;
CloseFile(TF);
end;
end;
Jednak czasem dużo wygodniej (szybciej/krótszy kod) jest skorzystać z metody klas dziedziczących po TStrings
var
data : TStringList;
begin
if not FileExists('C:\plik.txt') then
ShowMessage('Sry, plik nie istnieje :/')
else
begin
data := TStringList.Create;
data.LoadFromFile('c:\plik.txt');
ListBox1.Items.Assign(data); // sprawdź też działanie metody Append(data)
data.free;
end;
end;
W ten sposób wczytaliśmy dane do zmiennej data. Możemy się do niej odwoływać jak do zwykłej tablicy ciągów znaków. Jednak musisz pamiętać, że pierwszy znak w obiekcie klasy string jest pod indeksem 1. Linie numerowane są od 0.
--- plik.txt ---
Aklimx
Witaj! Miłego dnia
--- plik.txt ---
ListBox1.Items.Add(data[0]); // Aklimx
ListBox1.Items.Add(data[0][6]); // x
ListBox1.Items.Add(data[1][6]); // !
Delphi, jak otworzyć plik pdf [delphi, otwieranie pliku pdf]
Do otwarcia pliku zewnętrznego (txt, pdf), jeśli chcesz go otworzyć w jego domyślnym programem (np. Notatnik lub Adobe Reader), można użyć połączenia interfejs API ShellExecute
w uses dodać ShellApi
procedure TMasterMind04.InstructionsClick(Sender: TObject);
begin
ShellExecute (Handle, 'open', 'c://ef90.pdf', nil, nil, SW_SHOWNORMAL);
end;
tutaj otwieranie idzie z menu ale może być z buttona itd.
Hmmm... czy aby na pewno jest to szybszy sposob (pod wzgledem czasu wykonania)? Testowales ten kod?
Przy wielkich plikach IMO ten drugi kod bedzie strasznie pamieciozerny, aby odczytac plik na ktorym bedziemy edytowac aplikacja zaalokuje wymagana pamiec co moze byc zabojcze dla programu.
Czas wykonywania jest bardzo zbliżony, wręcz identyczny... IMO dużo wygodniej jest tak wczytywać plik - nie trzeba się zastanawiać czy Reset() przewija wskaźnik na koniec czy też nie.
Co do pamięciożerności, to rzeczywiści wczytywanie dużych plików może sprawić problem, ale do większych plików użyłbym raczej strumieni.