Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2013, 16:35   #1
Senya23
Новичок
Джуниор
 
Регистрация: 09.10.2013
Сообщений: 6
По умолчанию StringGrid чтение из одного файла нескольких таблиц и запись

Помогите пожалуйста!

У меня задача обрабатывать последовательно множество таблиц из текстовых файлов в StringGrid. пользуюсь стандартными процедурами чтения и записи. Все работает. НО! Файлы легкие и получается большая нагрузка на жесткий диск и замедление всего процесса при последовательном чтении и записи множества легких файлов. Есть ли возможность считывать с диска файл в котором множество таблиц (например 100), последовательно обрабатывать их и затем разом записывать все 100 измененных таблиц в один же файл?
Senya23 вне форума Ответить с цитированием
Старый 09.10.2013, 16:46   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В файле может быть что угодно, в том числе и множество таблиц. Ток прога должна уметь по информации в файле сама, или с помощью другой проги, находить нужную таблицу и читать её, ну и писать так, что бы позже опять разобраться. Это уже давным-давно реализовано и называется база данных. Можно и самому запрограммировать, с помощью тех же стандартных процедур чтения и записи (что это?)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.10.2013, 16:51   #3
Senya23
Новичок
Джуниор
 
Регистрация: 09.10.2013
Сообщений: 6
По умолчанию

Вот я и прошу помощи как это можно реализовать на практике. Пока ничего не получается...
Senya23 вне форума Ответить с цитированием
Старый 09.10.2013, 18:09   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну так а файлы как формируются?
Чем помочь если не знаешь все изюминки условий работы? Какого-то общего метода нет - в данной задаче в связи с отсутствием подробностей можно посоветовать все что угодно от использования СУБД до XML движков.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2013, 20:38   #5
Senya23
Новичок
Джуниор
 
Регистрация: 09.10.2013
Сообщений: 6
По умолчанию

Вот мои стандартные процедуры чтения из файла txt и записи

код:
Код:
procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
 var
   f:    TextFile;
   i, k: Integer;
 begin
   AssignFile(f, FileName);
   Rewrite(f);
   with StringGrid do
   begin
     // Write number of Columns/Rows
    Writeln(f, ColCount);
     Writeln(f, RowCount);
     // loop through cells
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
         Writeln(F, Cells[i, k]);
   end;
   CloseFile(F);
 end;
Код:
procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
 var
   f:          TextFile;
   iTmp, i, k: Integer;
   strTemp:    String;
 begin
   AssignFile(f, FileName);
   Reset(f);
   with StringGrid do
   begin
     // Get number of columns
    Readln(f, iTmp);
     ColCount := iTmp;
     // Get number of rows
    Readln(f, iTmp);
     RowCount := iTmp;
     // loop through cells & fill in values
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
       begin
         Readln(f, strTemp);
         Cells[i, k] := strTemp;
       end;
   end;
   CloseFile(f);
 end;

Последний раз редактировалось Stilet; 09.10.2013 в 20:42.
Senya23 вне форума Ответить с цитированием
Старый 09.10.2013, 20:43   #6
Senya23
Новичок
Джуниор
 
Регистрация: 09.10.2013
Сообщений: 6
По умолчанию

Но тут читается из одного файла одна таблица и записывается в файл одна же таблица.
Senya23 вне форума Ответить с цитированием
Старый 09.10.2013, 20:46   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так хорошо, я правильно понимаю - каждый элемент с новой строки?
Может тогда стоит использовать TStringList? Он считывает сразу весь файл.
Код:
With TStrinGlist.Create do begin
 LoadFromFile(FileName);
 k:=0;
 ColCount:=Strings[n]; inc(n);
 RowCount:=Strings[n]; inc(n);
     for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
       begin
         Cells[i, k] := Strings[n]; inc(n);
       end;
   end;
 free;
end;
Собственно все изменения проводить в памяти а потом этим же классом сохранять?

И всетки я свой вопрос повторю: Откуда берутся файлы и как наполняются? Если это делает твоя программа, то почему не использовать Базы Данных?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2013, 21:00   #8
Senya23
Новичок
Джуниор
 
Регистрация: 09.10.2013
Сообщений: 6
По умолчанию

Сами файлы я сам создал. запустил программу, вручную заполнил все ячейки StringGrid и через процедуру сохранения записал 1 файл. Затем создал множество копий: 100000 штук. Теперь в программе ввожу новые данные (1 новый столбец) и запускаю. Там через цикл по ходу выполнения загружается таблица из файла, изменяется на основе новых данных и сохраняется в файл под тем же именем. В итоге 100000 легких файлов последовательно читается и записывается.
Код:
 for i:=1 to 100000 do
    begin

     Stat:= 'R:\TXT\' + IntToStr(i) + '.txt';
     loadStringGrid(StringGrid1,Stat);
     form1.predobr(StringGrid1,D,);
     SaveStringGrid(StringGrid1,Stat);
     ProgressBar1.Position:=i;
     Application.ProcessMessages;

    end ;    // конец выполнения расчетов!!!!!!!!

Последний раз редактировалось Stilet; 09.10.2013 в 22:30.
Senya23 вне форума Ответить с цитированием
Старый 09.10.2013, 21:18   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Там через цикл по ходу выполнения загружается таблица из файла, изменяется на основе новых данных и сохраняется в файл под тем же именем.
И вся эта работа производится через визуальный компонент. Вот вам и тормоза.
northener вне форума Ответить с цитированием
Старый 09.10.2013, 21:29   #10
Senya23
Новичок
Джуниор
 
Регистрация: 09.10.2013
Сообщений: 6
По умолчанию

Главные тормоза именно последовательное чтение и запись множества файлов. Процессор загружен на 15%. А при использовании SSD диска скорость выполнения увеличивается втрое.

Вы простите если что не так, я просто новичок пока в Delphi. Но может есть простое решение...
Senya23 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение и запись нескольких Memo в txt flouwjke Помощь студентам 2 29.04.2012 16:54
С++, Запись и чтение StringGrid в файл Vl.fom Помощь студентам 4 23.04.2012 00:49
Запись в несколько таблиц нескольких записей Лубышев SQL, базы данных 8 09.04.2010 17:42
Чтение/запись в файл в StringGrid SVadiks Помощь студентам 0 03.12.2009 22:14
чтение из одного exe файла, и запись в другой exe inndim Общие вопросы Delphi 2 04.02.2009 15:23