![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Pellegrino |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 13.3.2007 Где: Russian Federatio n Репутация: нет Всего: нет |
Уважаемые, столкнулся с такой непростой задачкой, как работа с текстовым файлом сложной структуры. Нужно считать с него коды станций, номера платежей, суммы и коды статей. И дату. Желательно в табличку запихнуть для удобства работы. Единственный вариант, который приходит в голову, это построчное считывание и анализ. Подскажите какими методами такое можно провернуть?
Это сообщение отредактировал(а) Pellegrino - 28.1.2010, 23:08 Присоединённый файл ( Кол-во скачиваний: 42 )
razsb.txt 3,45 Kb |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Так грузи в Memo, а дальше парси всякими строковыми функцями вроде "copy". -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 1 Всего: 9 |
Pellegrino
Лучше всего структура файла сменить
Я даже бы сказал - посимвольный -------------------- Фсё будет хорошо!!! |
|||
|
||||
| Pellegrino |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 13.3.2007 Где: Russian Federatio n Репутация: нет Всего: нет |
Файл менять не могу и структуру тоже. Данные нужны для БД. Конкретно привязать не могу именно к copy, так как длина названий везде разная и это только 1\5 файла. А как сделать чтобы записывал только суммы из строк со словами "по станции"?
|
|||
|
||||
| chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 1 Всего: 9 |
Значить алгоритм, приблизительно такой.
1. Загружаем/открываем текстовой файл 2. Ищем строку "по станции" (ф-ций поиска хватает) 3. Запоминаем номер строки и запускаем поиск уже по строке, в которой нашли слово "по станции" 4. Заносим сумму в базу 5. Ищем следующую строку, где находиться слово "по станции" Добавлено @ 20:40 Тут вопрос может возникнуть только в пункте 3. Как искать!?! Или тупым перебором, то есть каждую строку анализировать на символ "|" и когда, мы найдем в строке второй символ "|", то мы знаем, что за вторым символом уже идет желаемая сумма, то мы откидываем пробелы и заносим сумму в базу. Второй вариант, найти ф-цию поиска, которая ищет по шаблону Это сообщение отредактировал(а) chip_and_dayl - 29.1.2010, 20:41 -------------------- Фсё будет хорошо!!! |
|||
|
||||
| Pellegrino |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 13.3.2007 Где: Russian Federatio n Репутация: нет Всего: нет |
Вот у меня была идея искать на подобе какойнить маски.
|
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 7 Всего: 50 |
Так вроде нет никаких проблем разобрать файл.
Конечный автомат - стандартный алгоритм. -------------------- |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Я чего-то возможно не понимаю, но не вижу никакой проблемы разобрать этот файл.
Длина строки - фиксированная. Длина каждой ячейки - тоже. Функции copy вместе с trim хватит с головой и даже больше... Если я правильно понял структуру файла, то:
Это сообщение отредактировал(а) kami - 30.1.2010, 01:33 |
|||
|
||||
| Pellegrino |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 13.3.2007 Где: Russian Federatio n Репутация: нет Всего: нет |
Круто, спасибо. А как добавить еще коды платежей и суммы по ним? Еще вопрос, что за регулярные выражения, они могут тут помочь? А в данные из типа рекорд можно в стингГрид укладывать?
Это сообщение отредактировал(а) Pellegrino - 1.2.2010, 14:08 |
|||
|
||||
| profesiachuvak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 7.11.2009 Где: Беларусь, Минск Репутация: 1 Всего: 4 |
Обращаться к fields (полям) записи и выводить их в StringGrid. -------------------- Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет. |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Не понял вопроса, или Вы не читали мой ответ. Stations[i].Pays[j].Code и Summ - это разве не то, что нужно? Строка платежа разбирается полностью по всем колонкам за исключением порядкового номера.
Не ко мне. Более чем можно, и к этому нет никаких препятствий. Только давайте так - решать за Вас Вашу задачу здесь, имхо, не будут. За этим - в "Центр Помощи". С учетом того, что я и так сказал больше, чем нужно было, предлагаю следующее - Вы попробуете сами перенести данные из записей в StringGrid. Если что-то не получится - с конкретным вопросом и своим "работающим не так, как нужно" кодом - пожалуйста сюда. |
|||
|
||||
| Pellegrino |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 13.3.2007 Где: Russian Federatio n Репутация: нет Всего: нет |
Дату я забрал, правда, может и не самым красивым способом. Подозреваю, что косяки еще могут меня встретить.
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Код с моими комментариями:
Замечание не по теме - для удобства чтения другими вашего кода, неплохо было бы оформлять его, придерживаясь правил, принятых у создателей VCL. Да и обзывать компоненты лучше осмысленными именами, чтобы не пришлось мучительно искать - "а что же отображает Edit94 на Form31". Это сообщение отредактировал(а) kami - 1.2.2010, 23:38 |
|||
|
||||
| Pellegrino |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 13.3.2007 Где: Russian Federatio n Репутация: нет Всего: нет |
По моей задумке пользователь вводит год в эдите3 и выбирает месяц из комбоБокса, а после я захватываю дату и сравниваю её с введенным, если нет совпадения, то вывожу сообщение об ошибке ввода и блокирую кнопку записи в БД. А как до 6 строки пролистать - for i:=0 do 5 then таким образом? Еще проблема возникла в том, что версия проги выбрасывающая отчет сменилась, и изменился отчетный файлик. В нем три вида отчетов, мне нужны станции с кодами платежей и цифрами по ним по ФО-7л и ФО-7н, Фо-7М не нужно. Возникла идея разбить на два текстовика с нужным содержим по Фо-7л и Н, а как можно определять начало и концовки их?
Присоединённый файл ( Кол-во скачиваний: 2 )
razsb.txt 47,17 Kb |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
||||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |