File of string

0

Witam, mój problem polega na tym, że chciałem stworzyć zmienna plikową typu string, więc użyłem w tym celu typu, podałem string[255] a potem zapisać kolejne linijki z tego pliku do tablicy stringów, niestety przy "read(plik, tablica_string[i]);" wywala mi błąd "Error: Typecast has different size (8 -> 256) in assignment" . Potrzebuję tego gdyż tworzę program, który wyszukuje w plikach .pas konkretnych wzorców. Prosiłbym o pomoc.

program project1;

uses
crt;

type
  TAB = array[0..1000] of string;
  dlugosc = string[255];

var
  i, j: integer;
  plik : file of dlugosc;
  tablica_string : TAB;
  rozmiar_pliku : integer;

procedure wczytywanie;    
begin
    i := 0;
    assign(plik, 'plik.pas');
    reset(plik);
    while not eof(plik) do
      begin
        i := i + 1;
       // for j := 1 to 8 do
          read(plik, tablica_string[i]);
      end;
    close(plik);
end;

begin

  wczytywanie;

  writeln();

 rozmiar_pliku := FileSize(plik);

  for i:=1 to 10 do
      begin
          writeln(tablica_string[i]);
      end;

  writeln('Rozmiar pliku to: ', rozmiar_pliku);

 readln;
end. 
0

wywal dlugosc (co to za nazwa dla typu?), a daj file of shortstring i array[0..1000] of shortstring

0

Program się kompiluje, lecz nie wyświetla żadnej zawartości, tak jakby ten plik był pusty, a wpisałem tam 5 linijek tekstu dla przykładu. Ponadto przy instrukcji rozmiar_pliku := FileSize(plik); podczas działania programu pojawia się raised exception class RunError(103).

0
Infinito napisał(a):

Ponadto przy instrukcji rozmiar_pliku := FileSize(plik); podczas działania programu pojawia się raised exception class RunError(103).

Pewnie dlatego, że ten plik jest już wtedy zamknięty...

0

Fakt... głupi błąd, to już z głowy ale dalej tak jakby mam pusty plik, w którym mam zapisane te 5 linijek tekstu... Rozmiar pokazuje mi 0, ktoś podpowie dlaczego?

0
Infinito napisał(a):

... tworzę program, który wyszukuje w plikach .pas konkretnych wzorców

  • Pliki *.pas to pliki tekstowe, a do obsługi takich plików jest już zdefiniowany typ - "Text".
  • Typy zdefiniowane przez Ciebie raczej zaciemniają kod, niż ułatwiają jego analizę.
  • Odczytując plik tekstowy używasz tylko instrukcji "Read", więc jak chcesz przejść do kolejnych linii - musi być "Readln".
  • I jeszcze jedno: funkcji "FileSize" nie można stosować do plików tekstowych.
    Na koniec kod. Przeanalizuj go, zobacz co robi i ewentualnie dopasuj do swoich potrzeb
program project1;

var
  i, IleLinii: Integer;
  Plik: Text;
  Tablica: array[1..1000] of String;
  RozmiarPliku: Integer;

procedure Wczytywanie;
begin
  Assign(Plik, 'Plik.pas');
  Reset(plik);
  IleLinii:= 0;
  RozmiarPliku:= 0;
  while not Eof(Plik) do begin
    Inc(IleLinii);
    Readln(Plik, Tablica[IleLinii]);
    Inc(RozmiarPliku, Length(Tablica[IleLinii]));
  end;
  Close(Plik);
end;

begin
  Wczytywanie;
  for i:= 1 to IleLinii do Writeln(Tablica[i]);
  Writeln('Rozmiar TEKSTU w pliku to: ', RozmiarPliku);
  Readln;
end.
0

Dziękuję za pomoc, przydał się ten kod :)

0

Czemu nie użyjesz VCL? W sensie coś w stylu

var TS: TStringList;
// [ bla bla bla]
TS := TStringList.Create;  // tworzenie

TS.LoadFromFile('C:\folder\folder\plik.txt');   //ładowanie
Writeln('Pierwsza linijka', TS[0]);
Writeln('Druga linijka', TS[1]);
Writeln('Ilość lini', TS.Count);

TS.Free // zwalnianie

Oczywiście musisz dodać Classes do uses

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