Имя пользователя:
Пароль:
 

Название темы: сумма
Показать сообщение отдельно

Пользователь


Сообщения: 108
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как-то надо было создать программу для обработки TSV.
Ну я создал таблицу, все данные хранил в базе данных используя движок BDE.
Так как я не знал, какого содержания будут данные (их много и они не однотипные и там вперемешку данные разных типов), то я загружал файл в файловый поток, оттуда их загружал в стринглист, заменив tab, которым отделены данные на пробел и потом из стринглиста подгружал это все в базу данных и выводил на таблице на форме.
У тебя же задача намного легче, ты знаешь входные данные, поэтому тебе надо только создать таблицу с тремя полями, в первое вставляешь TDateTimePicker для даты, во второе TTimePicker для даты, а третье стандартная строка. (а можешь и не вставлять компоненты, а так и оставить стандартные поля, только тогда тебе надо будет анализировать правильность ввода данных пользователем). Сгенерировать конечную строку уже можно будет без проблем.

Для упрощения:
На форму кидаешь DbGrid, в него будут вносится данные. DbGrid-у в качестве входных данных прописываешь DataSource, а DataSource в качестве DataSet-а прописываешь ClientDataSet, а потом пишешь что-то вроде:
Код: Выделить весь код
ClientDataSet.Edit;
DbGrid.DataSource.DataSet.Post;
if not SaveDialog.Execute then exit;
AssignFile(UnitFile, SaveDialog.FileName+'.tsv');
{I-}
Rewrite(UnitFile);
try
   ClientDataSet.Edit;
   Data2:=TStringList.Create;
   Data2.IndexOf(temp); //temp = твои данные одной строкой, можно вытащить как угодно, хотя бы DbGrid.ToString, DBGrid.DataSource.ToString, DBGrid.DataSource.DataSet.ToString...
   dbGrid.DataSource.DataSet.Edit;
   for I := 0 to Data.Count - 1 do
   ClientDataSet.Fields[i].Value:=dbGrid.Fields[i].Value;
   ClientDataSet.First;
   for I := 0 to DbGrid.DataSource.DataSet.RecordCount - 1 do
    begin
    s:='';
    for ii := 0 to Data.Count - 1 do
    try
    NullStrictConvert:=true;
    if ClientDataSet.Fields[ii].Value=NULL then break;
    if s<>'' then S:=S+#9+ClientDataSet.Fields[ii].Value
             else S:=ClientDataSet.Fields[ii].Value;
    except
    NullStrictConvert:=false;
    if s<>'' then S:=S+#9+ClientDataSet.Fields[ii].Value
             else S:=ClientDataSet.Fields[ii].Value;
    end;
    Data2.Text:=s;
    Data2.Text:=StringReplace(Data2.Text,#13,'',[rfReplaceAll]);
    if i<>DbGrid.DataSource.DataSet.RecordCount-1 then Write(UnitFile, Data2.Text);
    ClientDataSet.Next;
    end;
    CloseFile(UnitFile);
    finally
    SaveDialog.Free;
    end;
 {I+}

Последний раз редактировалось novashdima, 09-02-2013 в 23:39.


Отправлено: 06:21, 09-02-2013 | #6

Название темы: сумма