Odczytywanie rekordow z pliku typowanego

0

Mam za zadanie stworzyć pewna listę proszków. Robię to za pomocą komponentu ListView i pliku typowanego, do którego zapisuję rekordy. Potrzebuję informacji, w jaki sposób mam zliczać, ile w danej kolumnie jest jedynek. Próbowałem robić to w ten sposób:

function Procenty : Double;
var
  i : Integer;
  w : Integer;
  x : Integer;
  P : TProszekFile;
  Rec : TProszek;
begin
  AssignFile(P, 'proszki.dat');
  if not FileExists('proszki.dat') then Result := 0
  else
    begin
      Reset(P);
      try
        w := 0;
        for i := 1 to FileSize(P) do
          begin
            x := Rec.Plamaa;
            if x = 1 then w := w + 1;
          end;
      finally
        CloseFile(P);
      end;
      Result := w;
    end;
end; 

No i teoretycznie skoro mam w pliku 'proszki.dat' zapisane 3 proszki, dla ktorych Rec.Plamaa = 1, to Result powinien wynosić 3, a program wyświetla mi 0. Nie chcę wrzucać całego kodu, bo jest trochę długi, a nie chce zaśmiecać, więc jeśli do określenia mojego błędu potrzebujecie jakichś szczegółów to będę wklejał odpowiednie linijki kodu. Dorzucę jeszcze tylko ten rekord:

 TProszek = packed record
  Name : String[30];
  Temp : Integer;
  Zuzycie : Integer;
  Cena : Integer;
  Plamaa : Integer;
  end;

Będę ucieszony z każdej pomocy.

0

Proszę powiedz mi, gdzie w tym kodzie wczytujesz cokolwiek:

function Procenty : Double;
var
  i : Integer;
  w : Integer;
  x : Integer;
  P : TProszekFile;
  Rec : TProszek;
begin
  AssignFile(P, 'proszki.dat');
  if not FileExists('proszki.dat') then Result := 0
  else
    begin
      Reset(P);
      try
        w := 0;
        for i := 1 to FileSize(P) do
          begin
            x := Rec.Plamaa;
            if x = 1 then w := w + 1;
          end;
      finally
        CloseFile(P);
      end;
      Result := w;
    end;
end; 

?

0

Chyba nie rozumiem za bardzo o co pytasz. Wczytywanie z plików mam w innym miejscu kodu i tam mi zapisuje rekordy w komponencie ListView, jeśli o to Ci chodzi.

 procedure TMainForm.ReadFile;
var
  P : TProszekFile;
  F : TPlamyFile;
  i : Integer;
  w : Integer;
  ListItem : TListItem;
  Rec : TProszek;
  RecP : TPlamy;
begin
  ListProszek.Clear;
  if not FileExists('proszki.dat') then
    Exit
  else
  begin
    AssignFile(P, 'proszki.dat');
    try
      Reset(P);
      if i = 0 then Exit;
      for I := 1 to FileSize(P) do
        begin
          Read(P, Rec);
          ListItem := ListProszek.Items.Add;
          ListItem.Caption := Rec.Name;
          ListItem.SubItems.Add(IntToStr(Rec.Temp));
          ListItem.SubItems.Add(IntToStr(Rec.Zuzycie));
          ListItem.SubItems.Add(IntToStr(Rec.Cena));
          ListItem.SubItems.Add(FloatToStr(((3000 / Rec.Zuzycie)/Rec.Cena)*100));
          ListItem.SubItems.Add(IntToStr(Rec.Plamaa));
        end;
     finally
        CloseFile(P);
     end;
end;

W tej jednej funkcji, którą wkleiłem w pierwszym poście, chciałem jedynie, żeby mi zliczało ile jest jedynek w kolumnie Plamaa. Założenie było takie, że będzie sprawdzać po kolei wartość 'Rec.Plamaa' w każdym rekordzie i jeśli trafi na '1', to zwiększy zmienną 'w' o jeden.

Edit: Doszedłem do tego wreszcie. Temat można zamknąć. Dla przyszłych pokoleń, które być może będą poszukiwać odpowiedzi na zadane przeze mnie pytanie:
Nie ma co się męczyć z rekordami zapisanymi w pliku. Można odczytać wszystko bezpośrednio z listy. Oto jak wygląda funkcja:

 function TMainForm.Procentya;
var
  i : Integer;
  w : Integer;
  x : Integer;
  y : Double;
begin
  w := 0;
  for i := 0 to (ListProszek.Items.Count - 1) do
    begin
      x := StrToInt(ListProszek.Items[i].SubItems[4]);
      if x = 1 then w := w + 1;
    end;
  y := (w * 100)/i;
  Result := y;
end;

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