|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
|
Как написать процедуру поиска26.11.2013, 20:52. Показов 2455. Ответов 25
Метки нет (Все метки)
Допустим существует папка, в ней порядка 30 файлов xls. По содержанию они идентичны, различаются лишь одной буквой в одной и той же ячейке (в моем случае В6).Как мне организовать поиск файлов (которые удовлетворяют условию что заданное значение равно значению в ячейке, например я выбираю А, программа смотрит в этой ячейке А=А, если да то дальше, нет переход к другому файлу(в этой ячейке может быть или А, или В, или С) и вывод их названий допустим в listbox. То есть три кнопки А,В,С и listbox. Выбираю А, выводит все файлы, где в ячейке В6 есть А, выбираю В-файлы с В и т.д.
Заранее спасибо.
0
|
|
| 26.11.2013, 20:52 | |
|
Ответы с готовыми решениями:
25
Разработать процедуру поиска заданных изменений в файле/каталоге Как правильно написать процедуру сохранения? Как вынести процедуру сортировки в отдельную процедуру |
|
177 / 149 / 43
Регистрация: 14.08.2008
Сообщений: 1,290
|
||||||
| 27.11.2013, 03:08 | ||||||
|
В архиве полный пример.
А вот кусок кода, по перебору файлов и сравнению ячеек.
1
|
||||||
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
|
| 27.11.2013, 12:07 [ТС] | |
|
Спасибо большое! Очень помогло
0
|
|
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
||||||
| 27.11.2013, 14:05 [ТС] | ||||||
0
|
||||||
|
177 / 149 / 43
Регистрация: 14.08.2008
Сообщений: 1,290
|
|
| 27.11.2013, 15:45 | |
|
if s='''A' then
Зачем двойная кавычка перед А ?
0
|
|
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
||||||
| 28.11.2013, 09:54 [ТС] | ||||||
|
В этом архиве лежат файлы excel с которыми я работаю. В них почему то текст в ячейках пишется так:'A (эти файлы создает Dos машины, а мне их только нужно обработать, не изменяя). Двойную ковычку ставлю, чтобы delphi видел ее в ячейке. Но он все равно ее не видит.
Добавлено через 37 минут Причем если создавать самому новый xls файл, в нем вручную забивать В6=А и так далее, то все работает. Почему то программа не может прочитать текст с моих файлов, или я не правильно ввожу условия. Добавлено через 4 минуты И еще вопрос: у меня в 1 колонку stringrid1 записывается дата, во вторую число (кол-во изготовленной продукции), а в 3-ю я хочу чтобы значение из второй колонки делилось на число 1440, и записывался только ответ (в моем случае значение t разделить на число 1440). Как я могу это сделать? Вот мой код
0
|
||||||
|
177 / 149 / 43
Регистрация: 14.08.2008
Сообщений: 1,290
|
|
| 28.11.2013, 12:12 | |
|
Добавьте мемо на форму и выведите в нее значение ячейки, скопируйте и вставьте в код программы. Просто может быть там "А" или в другой раскладке или вместе с каким нибудь невидимым символом.
memo1.lines.add('____'+WorkSheet.Range['B6'].Text+'____');
1
|
|
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
||||||
| 28.11.2013, 14:05 [ТС] | ||||||
|
Спасибо огромнейшее
Уже дня 2 думаю над этой "А"!Оказалось все так просто: там после нее пробелов 10 еще стоит, поэтому просто А он не видел)Добавлено через 9 минут teleprog, Посмотри пожалуйста
0
|
||||||
|
177 / 149 / 43
Регистрация: 14.08.2008
Сообщений: 1,290
|
||||||
| 28.11.2013, 14:15 | ||||||
|
Лучше вот так наверно сделать
1
|
||||||
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
||||||
| 28.11.2013, 14:31 [ТС] | ||||||
|
teleprog, Почти все работает, только возникает вопрос: почему когда выбрано 3 файла, то есть таблица заполнена, считает все на ура, если выбрано 2 файла, предпоследняя строка не заполнена, он выдает ошибку? Насколько я понимаю он не находит значение в предпоследней строке, из-за этого не считает сумму, может дело в заполнении таблицы? RowCount фиксировано 5, но не всегда в 3 строке есть значение.
Добавлено через 4 минуты Вот полный код
0
|
||||||
|
177 / 149 / 43
Регистрация: 14.08.2008
Сообщений: 1,290
|
||||||
| 28.11.2013, 16:40 | ||||||
|
Поменяй на
1
|
||||||
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
||||||||||||||||
| 29.11.2013, 00:53 [ТС] | ||||||||||||||||
|
Спасибо, все заработало.
![]() Добавлено через 23 минуты teleprog, Если тебе не сложно, можешь ответить на пару вопросов, интересующих меня с момента начала работы над программой и возникающих по ходу. 1) В listbox1 выводит названия по алфавиту, а не по порядку, как он ищет (в следствии чего в stringgrid он может записать дату вначале 29.08.2013, а потом 26.08.2013). То есть по моим условиям проход он осуществляет: вначале смотрит размер, далее время создания, после чего записывает их в listbox. Допустим один файл называется А350290813.13А, а другой С350260813.13А. Как ты видишь файл С350260813.13А был создан раньше (26 августа), то есть по сути он первый должен попасть в listbox, а первым почему то попадает А350290813.13А. Можно это как то исправить? Как бы это не столь важно, но для красоты в stringgrid и ради интереса спрашиваю.
Буду очень рад и благодарен если ты ответишь на все вопросы
0
|
||||||||||||||||
|
177 / 149 / 43
Регистрация: 14.08.2008
Сообщений: 1,290
|
|
| 29.11.2013, 02:11 | |
|
1) Сортируй вручную
Поищи по форуму по фразе "сортировка listbox" например ListBox: сортировка по дате создания 2) к DateTimePicker2.Date прибавь 0.9999 if (FileDateToDateTime(SR.Time)>(DateTimePi cker2.Date+0.9999)) then // 3) добавь счетчик дат, и при каждой новой дате меняй размер грида Stringgrid1.RowCount:= N+1; 4) сохрани одну из форм под другим именем, и добавь ее во второй проект
1
|
|
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
||||||
| 29.11.2013, 15:13 [ТС] | ||||||
|
Спасибо за ответы на мои вопросы. Решил проэксперементировать с переносом stringgrid в excel. Процедуру сделал через кнопку Save, все сохраняет, но почему то 4 столбец, где считается моя эффективность, в excel переносится #, а все остальные отлично. В чем может быть причина не подскажешь? И еще интересует вопросик: могу ли я в delphi прописать, чтобы при переносе stringgrid, ячейки создаваемые в excel изменяли размер под входящий в него текст? Готовый проект и получившийся excel файл прилагаю в архиве.
0
|
||||||
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
||||||
| 29.11.2013, 16:28 [ТС] | ||||||
|
И еще вопросик возник: попытался дописать код по подсчету эффективности (формула для подсчета:сумма всех значений эффективности(4 столбик) деленное на сумму дней), потому что бывает так, в некоторые дни она равна 0, так как машина стояла, и получается он считает кол-во дней вместе с этим днем, в итоге не правильно считает общую эффективность. После внесенных изменений в коде, считает все равно по прежнему. Посмотри пожалуйста.
0
|
||||||
|
177 / 149 / 43
Регистрация: 14.08.2008
Сообщений: 1,290
|
|
| 29.11.2013, 20:56 | |
|
#- колонку раздвинь мышкой.
Как Сделать авторазмер столбцов и рядов XL.Columns("A:A").EntireColumn.AutoFit 'устанавливает авторазмер столбца A XL.Columns("B:B").EntireColumn.AutoFit 'устанавливает авторазмер столбца B XL.Rows("1:1").EntireRow.AutoFit 'устанавливаем авторазмер ряда 1 XL.Rows("2:2").EntireRow.AutoFit 'устанавливаем авторазмер ряда 2 По формуле- непойму что неправильно, нужен пример данных которые расчитываются и что выдает, и почему не подходит.
1
|
|
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
||||||
| 29.11.2013, 22:24 [ТС] | ||||||
|
#-при раздвигание открывает, но не ставит разделители (число дробное, а пишет все цифры подряд без запятой), может проблема в типах данных?
По поводу формулы: данные по которым рассчитывается в архиве, результат на скриншоте + сам проект в архиве.
0
|
||||||
|
177 / 149 / 43
Регистрация: 14.08.2008
Сообщений: 1,290
|
|
| 29.11.2013, 22:47 | |
|
В программе надо у всех переменных, участвующих в сложении дробных чисел сделать тип Real.
И соответсвенно использовать тогда StrToFloat, FloatToStr. По поводу нулей- Или учитывать только строки без нулей, и соответсвенно подсчитывать кол-во ненулевых для среднего. Или добавить столбец с еденичками, которые можно редактировать на нули. Если 1 то учитываем эту строку, если 0 то пропукскаем.
1
|
|
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
|
| 30.11.2013, 11:39 [ТС] | |
|
У меня там вроде везде real, и использую StrToFloat, FloatToStr. Код в предыдущем сообщении
Добавлено через 3 минуты А как не учитывать строки с 0, вроде я условие поставил, а он все равно их учитывает?
0
|
|
|
11 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 24
|
||||||
| 30.11.2013, 12:08 [ТС] | ||||||
|
По поводу единиц: добавил столбик, туда будет заносится единица при каждой записи в stringgrid и его можно редактировать(менять на 0), добавил кнопку и процедуру подсчета с исключением, но не получается у меня исключить, остается все как было
, то есть он пишет сообщение, а потом считает все строки. Может там где 0, сделать удаление данной строки полностью из stringgrid со сдвигом всей таблицы, после чего он как раз будет считать оставшиеся строки? Если да, то как это прописать?
0
|
||||||
| 30.11.2013, 12:08 | |
|
Помогаю со студенческими работами здесь
20
Как остановить процедуру поиска? Калькулятор (как написать процедуру +/-) ? Как написать процедуру с обращением к Button? Как написать такую программу через процедуру/функцию Как написать процедуру вывода окна сообщения, содержащего произвольный текст,используя Delphi? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|