Заполнить StringGrid из типизированного файла

Помогите пожалуйста решить проблему - StringGrid заполняется только первой строкой файла, как это исправить?
stringgrid1.DefaultColWidth:=(form3.ClientWidth-10) div 9;   
  stringgrid1.Cols[0].Add('Фамилия');                     
  stringgrid1.Cols[1].Add('Имя');
  stringgrid1.Cols[2].Add('Отчество');
  stringgrid1.Cols[3].Add('Дом. тел.');
  stringgrid1.Cols[4].Add('Раб. тел.');
  stringgrid1.Cols[5].Add('Сот. тел.');
  stringgrid1.Cols[6].Add('Адрес');
  stringgrid1.Cols[7].Add('Должность');
  stringgrid1.Cols[8].Add('e-mail');
  assignfile(FileSp,'Sprav.txt');
  if fileexists('Sprav.txt') then
  begin
    reset(FileSp);
    stringgrid1.RowCount:=FileSize(FileSp)+1;
    while not eof(FileSp) do
    begin
      read(filesp,sp);
      with StringGRid1 do
      for i:=1 to RowCount-1 do   //Заголовки строк не трогаем
      begin
        Cells[0,i]:=sp.fam[i];
        Cells[1,i]:=sp.im[i];
        Cells[2,i]:=sp.ot[i];
        Cells[3,i]:=sp.dom[i];
        Cells[4,i]:=sp.rab[i];
        Cells[5,i]:=sp.sot[i];
        Cells[6,i]:=sp.adr[i];
        Cells[7,i]:=sp.dol[i];
        Cells[8,i]:=sp.em[i];
      end;
    end;
    closefile(filesp);
  end;
7 ответов

я не профи, но не совсем понял зачем Cells[0,i]:=sp.fam[i]Вы же подряд считываете все записи из файла считали, записали данные в ячейки считали следующую запись, считываете всегда в 1-у переменнуюда и не понятно что за типы переменных и заключите код в тег "[DЕLPHI][/DЕLPHI]"или вы сделали массивы и хотите считать в них, а из них уже в ячейки ? данные в файле записи?


я не профи, но не совсем понял зачем Cells[0,i]:=sp.fam[i]
иначе заполняется только последней строкой.
type
  TSpravochnik=record   //создание типизированного файла
    fam:string[20];     //фамилия
    im :string[20];     //имя
    ot :string[20];     //отчество
    dom:string[20];     //домашний телефон
    rab:string[20];     //рабочий телефон
    sot:string[20];     //сотовый телефон
    adr:string[20];     //адрес
    dol:string[20];     //должность
    em :string[20];     //e-mail
  end;
 
  Sp:TSpravochnik;
  FileSp:File of TSpravochnik;
я просто хочу считать типизированный файл в StringGrid))


Что то вы не то написали...С планшета сложно код написать но идея такаяВы написали Пока не конец файла Считываете переменную, записываете ее во все строки таблицы Считываем следующую переменую,А надоИ от 1(или 0, не помню как там файл начинается) до размерфайла ду Считываем из файла и пишем в строку И+1 ЕндВообщем считывание должны быть в том же цикле, что и запись, а у вас в цикле цикл записи, вы и напутали


И от 1(или 0, не помню как там файл начинается) до размерфайла ду Считываем из файла и пишем в строку И+1 Енд
так вообще не работает(((


for i:=1 to RowCount-1 do
Этот цикл выбрасываем нифиг ибо он не нужен. Уже есть цикл
while not eof(FileSp) do
Перед началом этого цикла присваиваем
i:=1;
В конце тела цикла
i:=i+1;


я не понимаю зачем добавлять счетчик??? он и так напутал, со счетчиком еще чего-нибудь напутает stringgrid1.RowCount:=FileSize(FileSp)+1; есть же строка то есть мы уже знаем размер файлы зачем вы что то придумываете ???зачем это i:=i+1 и это while not eof(FileSp)зная размер файла, делается 1 цикл, в нем сразу чтение и запись в грид. все!


{...}
if fileexists('Sprav.txt') then
  begin
    reset(FileSp);
    stringgrid1.RowCount:=FileSize(FileSp)+1;
    
    if FileSize(FileSp) < 1 then Exit; 
    i:=1; //начинаем заполнять грид с первой строки
 
    while not eof(FileSp) do
    begin
      read(filesp,sp);
     
      Cells[0,i]:=sp.fam;
      Cells[1,i]:=sp.im;
      Cells[2,i]:=sp.ot;
      Cells[3,i]:=sp.dom;
      Cells[4,i]:=sp.rab;
      Cells[5,i]:=sp.sot;
      Cells[6,i]:=sp.adr;
      Cells[7,i]:=sp.dol;
      Cells[8,i]:=sp.em;
      
      Inc(i);
    end;
    closefile(filesp);
  end;