На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> StringGrid , чтение из файла
    доброго всем времени суток! :rolleyes: есть проблема, и думаю что решение этой проблемы могу найти только тут. Такая ситуация.. запись в файл происходит нормальн.. без приключений, но я ни как не могу въехать, :blink: как повернуть процесс в обратную сторону (прочесть этот файл).. прошу помощи! :ph34r:


    SaveDialog1->DefaultExt="txt";
    SaveDialog1->Filter="ASCII files (*.txt)|*.txt";

    if(SaveDialog1->Execute())
    {
    if(ExtractFileExt(SaveDialog1->FileName).UpperCase()==".TXT")
    {
    FILE *fop=fopen(SaveDialog1->FileName.c_str(),"wt");
    if(fop)
    {
    if(StringGrid1->RowCount>0)
    fprintf(fop,StringGrid1->Rows[0]->CommaText.c_str());
    for(int i=1;i<StringGrid1->RowCount;i++)
    fprintf(fop,"\n%s",StringGrid1->Rows[i]->CommaText.c_str());
    fclose(fop);
    }
    }
    }
      Самое простое - использовать sl:TStringList.
      Сначала грузишь файл в стринг-лист (LoadFromFile), устанавливаешь гриду RowCount и затем построчно делаешь для каждого StringGrid1.Rows[i].CommaText = sl[i];
      PS: можно и напрямую из файла строки читать, но тогда придется RowCount наращивать по 1
        Вариант конечно! но всё же для более высокого порядка хочется сделать процессы записи и чтения (однотипными)!

        OpenDialog1->DefaultExt="txt";
        OpenDialog1->Filter="ASCII files (*.txt)|*.txt";

        if(OpenDialog1->Execute())
        {
        if(ExtractFileExt(OpenDialog1->FileName).UpperCase()==".TXT")
        {
        FILE *fop=fopen(OpenDialog1->FileName.c_str(),"wt");
        if(fop)

        // дальше нипонимаю!!!!!! как направить на чтение?
        if(StringGrid1->RowCount>0)
        fprintf(fop,StringGrid1->Rows[0]->CommaText.c_str());
        for(int i=1;i<StringGrid1->RowCount;i++)
        fprintf(fop,"\n%s",StringGrid1->Rows[i]->CommaText.c_str());
        fclose(fop);
        }
        }
        }
          Цитата HESH @
          для более высокого порядка

          Ну, ну ;) Тогда придется использовать буфер для чтения строк и не ошибиться с его длинной
          ExpandedWrap disabled
            char buf[256]; //размер должен вмещать самую длинную строку StringGrid
            int i=0;
            while( !feof(fop) )
            {
              fgets(buf,256,fop);
              i++;
              if (StringGrid1->RowCount < i)
                { StringGrid1->RowCount = i; }
              StringGrid1->Rows[i-1]->CommaText = buf;
            }
              if (StringGrid1->RowCount != i)
                { StringGrid1->RowCount = i; }
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0284 ]   [ 16 queries used ]   [ Generated: 27.04.24, 07:50 GMT ]