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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - сумма

Ответить
Настройки темы
Delphi - сумма

Новый участник


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

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


Здравствуйте. Есть 3 Edit'a. В первом сумма, во втором дата и в третьем время. Сейчас по клику на кнопку создается строка с данными из этих трех значений, вида 06/02/13 в 10-30 на сумму 1000.00 отправлено. Ну итак каждый раз дописывается новая строка.

Сейчас у меня задача писать не в один файл, а в файл с соответствующей датой и в конце писать сумму всех строк. Соответственно каждый раз добавляя новую строчку надо пересчитывать все.

Помогите пожалуйста с реализацией, я не в силах

Отправлено: 10:33, 06-02-2013

 

Новый участник


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

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


Попробую писать это все в эксель, если есть какие-нибудь напутствия прошу ответить

Отправлено: 10:56, 06-02-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для lxa85

Необычный


Contributor


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

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


Исходники в студию.
Вообще, скорей всего придется перейти на некоторый форматированный ввод/вывод.
Например csv.
Да, так наверно будет проще всего.
Пример работы
Видео на YouTube

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 10:57, 06-02-2013 | #3


Новый участник


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

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


Код: Выделить весь код
procedure TForm1.Button2Click(Sender: TObject);
var
  report, date, time, price : string;
  report_conf : textfile;
begin
   date := Edit1.Text;
   time := Edit2.Text;
   price := Edit3.Text;
report :=  time + ' ' + date + ' на сумму ' + price + ' отправлен';

if FileExists('report.txt') then
     begin
       AssignFile(report_conf,'report.txt');
       Append(report_conf);
       writeln(report_conf,report);
       Flush(report_conf);
       CloseFile(report_conf);
     end
  else
     begin
       AssignFile(report_conf,'report.txt');
       Rewrite(report_conf);
       writeln(report_conf,report);
       CloseFile(report_conf);
     end

end;
В итоге мне нужно получать что-то вроде файла 06.02.13.txt с содержанием вида:

06.02.13 12:30 на сумму 1000.00 отправлен
06.02.13 12:35 на сумму 500.00 отправлен
06.02.13 13:30 на сумму 400.00 отправлен

Итого 06.02.13 отправлено на сумму 1900.00

Ну итак для каждого числа...

Вот я что на счет этого думаю, берем название файла из переменной date, далее если файл не существует - создаем, пишем строку time + ' ' + date + ' на сумму ' + price + ' отправлен'; и на следующей строке пишем итого Итого отправлено на сумму price. Если существует, то считываем сумму из последней строки (где итого) прибавляем к ней текущую price, а перед этой строки записываем time + ' ' + date + ' на сумму ' + price + ' отправлен'.

Вот что пока придумалось. Не знаю как реализовать присвоение имя файла из переменной, и как считывать итого и перед ним новую строку писать.



ИЛИ же как-то все это в эксель отправлять, что даже было бы удобней, почитал сейцчас работу с эксель на делфи, не совсем все понятно и не придумал пока как оформить шаблон экселевский куда все писаться будет, саму структуру.
Эксель круто, лучше бы в него, но первый вариант тоже подойдет

Последний раз редактировалось crindlok, 06-02-2013 в 11:29. Причина: добавил информацию


Отправлено: 11:16, 06-02-2013 | #4


Новый участник


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

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


UPD

Сам себе отвечаю, буду пробовать отправлять в эксель, план работы придумал))

Отправлено: 11:54, 06-02-2013 | #5


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


Сообщения: 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - сумма

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Сумма прописью - Форпост 4.32 OSZone Software Новости программного обеспечения 0 03-01-2011 10:30
[решено] Active Directori, конечная сумма elkorik Microsoft Windows NT/2000/2003 7 22-05-2009 16:27
HDD - Неверная контрольная сумма ATA vzh11 Накопители (SSD, HDD, USB Flash) 4 27-03-2009 17:28
Мd5-сумма Sviaga Хочу все знать 8 28-05-2008 19:41
Сумма трех байт bilytur Программирование и базы данных 9 28-09-2003 03:08




 
Переход