![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
Delphi - сумма
|
Новый участник Сообщения: 15 |
Здравствуйте. Есть 3 Edit'a. В первом сумма, во втором дата и в третьем время. Сейчас по клику на кнопку создается строка с данными из этих трех значений, вида 06/02/13 в 10-30 на сумму 1000.00 отправлено. Ну итак каждый раз дописывается новая строка.
Сейчас у меня задача писать не в один файл, а в файл с соответствующей датой и в конце писать сумму всех строк. Соответственно каждый раз добавляя новую строчку надо пересчитывать все. Помогите пожалуйста с реализацией, я не в силах ![]() |
|
Отправлено: 10:33, 06-02-2013 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Попробую писать это все в эксель, если есть какие-нибудь напутствия прошу ответить
![]() |
Отправлено: 10:56, 06-02-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать Исходники в студию.
Вообще, скорей всего придется перейти на некоторый форматированный ввод/вывод. Например csv. Да, так наверно будет проще всего. Пример работы Видео на YouTube |
------- Отправлено: 10:57, 06-02-2013 | #3 |
Новый участник Сообщения: 15
|
Профиль | Отправить 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 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
|
Профиль | Отправить PM | Цитировать UPD
Сам себе отвечаю, буду пробовать отправлять в эксель, план работы придумал)) |
|
Отправлено: 11:54, 06-02-2013 | #5 |
Пользователь Сообщения: 108
|
Профиль | Отправить 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Сумма прописью - Форпост 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 |
|