![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Atreides |
![]()
Сообщение
#1
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Уважаемые, столкнулся с такой непростой задачкой, как работа с текстовым файлом сложной структуры. Нужно считать с него коды станций, номера платежей, суммы и коды статей. И дату. Желательно в табличку запихнуть для удобства работы. Единственный вариант, который приходит в голову, это построчное считывание и анализ. Подскажите какими методами такое можно провернуть?
Сообщение отредактировано: Atreides - 28.01.2010 23:07 Прикрепленные файлы ![]() -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
вариант, который приходит в голову, это построчное считывание и анализ. Считывание - это все равно, да и вариантов не так много. Можно и построчно. А вот потом можно и порезвиться.. Например, при считывании заполняешь двумерный массив (короткие строки дополняются пробелами), то есть получаешь картинку. Потом на этой картинке распознаешь линии, и в соответствии с этим строишь таблицу. Задача не такая сложная, как может показаться, но.. Ты уверен, что в этих файлах/картинках/таблицах не будет сбоев? Например, строка со словом "ОТДЕЛЕНИЕ" не разделена на клетки и не отделена от нижней строки. Это сбой? или так и должно быть? В подобных случаях нужно предусмотреть все возможные варианты. Иначе одна неучтенная точка смажет весь результат.. Можно возразить, что такая универсальность, как распознавание _любой_ таблицы, тут не нужна; но реально это сэкономит время. Доказать это не возьмусь, но так оно обычно бывает. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
amega |
![]()
Сообщение
#3
|
![]() ? ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: ![]() ![]() ![]() |
а что если текстовый файл заменить на екселевкий?
|
Гость |
![]()
Сообщение
#4
|
Гость ![]() |
а что если текстовый файл заменить на екселевкий? да вроде все равно в чем хранить, вопрос кто это заносит: юзер или твоя прога табличку можно по разному хранить.... а если этот файл создает твоя прога (что наверно надежней будет) то ты сам можешь закодить любой удобный те формат если для дела лучше вобще БД использовать а если курсак ;) можно повозиться |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
сорри не досмотрел приложение, походу файл прога делает
тут все должно быть строго |
Atreides |
![]()
Сообщение
#6
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Да файл мне прога выкидывает, но не моя и менять я в ней не могу ничего. В файле много лишнего. Мне нужна только сумма по станции и код станции с датой. все остальное игнорировать. Данные мне нужны для БД. Есть примерный вариант как анализировать подобное, а то не так долго работаю с делфи, опыт а еще пока нету.
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
Rian |
![]()
Сообщение
#7
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 394 Пол: Мужской Репутация: ![]() ![]() ![]() |
ширина стобцов меняться может? если нет то все упрощается берешь строку от сих до сих и вот те ячейка....
шапка тож наверно статична можно сразу отбросить строки придется проверять, что именно в строке берешь ищешь твою "по станции", как нашел значит все строки до следующей "по станции" твои... (ну кроме разделителей) еще может можно ориентироваться по :---- | для удобства грузи в Тмемо строки сразу и видеть будешь что загрузил а разносить конечно в массив или по усмотрению может сразу в твою БД как удобней -------------------- Objective-C, Unity3d
|
Atreides |
![]()
Сообщение
#8
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Да все поля статичны. Ну вот как? Мне только коды станций и общая сумма нужны.
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
Lapp |
![]()
Сообщение
#9
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Да все поля статичны. Ну вот как? Мне только коды станций и общая сумма нужны. Если статичны - какие проблемы? Читаешь нужную строку и копируешь из нее по нужным позициям..-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата Мне только коды станций и общая сумма нужны. Читаешь файл в строку, и в цикле вытягиваешь из нее регулярным выражением фразу "ПО СТАНЦИИ", и следующие 2 вещественных числа. Первое будет кодом станции, второе - общая сумма.Свободная библиотека для работы с регулярками в Дельфи лежит вот тут: TPerlRegEx Была еще библиотека TRegExpr, тоже бесплатная, но что-то их официальный сайт лежит сейчас. Вот этот: http://www.regexpstudio.com/TRegExpr/TRegExpr.html P.S. Ну, или обычный Pos/PosEx, если не хочешь заморачиваться с регулярными выражениями. Но тогда будет чуть сложнее выделять сами числа. |
Atreides |
![]()
Сообщение
#11
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
С регулярными там чет все не по-русски :-( как заставить захватывать с строку?
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Безо всяких регэкспов:
procedure TForm1.ParseClick(Sender: TObject);На твоем файле из первого поста выдает в Memo1 вот такой результат: Эскизы прикрепленных изображений ![]() |
Гость |
![]()
Сообщение
#13
|
Гость ![]() |
надо и так попробовать, спасибо. Дату я забрал, правда, может и не самым красивым способом. Подозреваю, что косяки еще могут меня встретить.
//чтение из файла |
Atreides |
![]()
Сообщение
#14
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Клевый код, очень быстро работает. Вот с датой проще, наверное до 6 строки пролистать. а чтобы символы "Г."отбросить просто отминусовать их от конца или есть проще варианты? Еще проблема возникла в том, что версия проги выбрасывающая отчет сменилась, и изменился отчетный файлик. В нем три вида отчетов, мне нужны станции с кодами платежей и цифрами по ним по ФО-7л и ФО-7н, Фо-7М не нужно. Возникла идея разбить на два текстовика с нужным содержим по Фо-7л и Н, а как можно определять начало и концовки их?
Сообщение отредактировано: Atreides - 2.02.2010 22:18 Прикрепленные файлы ![]() -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
Гость |
![]()
Сообщение
#15
|
Гость ![]() |
Решил просто перебирать тупо строки и писать в StringGrid. По задумке должно было писать все строки начинающиеся с символа "|", но чет не очень вышло, пишет только три первых столбца и заполняет чушью.
procedure TForm4.Button5Click(Sender: TObject); |
Atreides |
![]()
Сообщение
#16
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Вроде разобрался с заполнение, только из пяти столбцов заполняются только первые три. В чем причина не пойму. Как можно удалить строки из грида, если там пустые ячейки или не нужные мне значения? И кучнеи сбить, а то пробелов с пустыми строками полно.
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
Гость |
![]()
Сообщение
#17
|
Гость ![]() |
Разобрался!
//загрузка данных в табличку Один вопрос, как маску наложить на Едит в 4 символа цифровых. И организовать его проверку на корректный ввод? |
Atreides |
![]()
Сообщение
#18
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Еще один маленький вопросик. Надо в табличку положить коды станций, но чет они у меня не хотят вставать как нужно и "размножаться". И еще как заставить стринггрид заполняться строка в соответствии с записями, а то я руками вбухал 200, что не есть хорошо. Во второй грид гружу по выборке.
procedure TForm4.Button5Click(Sender: TObject); -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
Rian |
![]()
Сообщение
#19
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 394 Пол: Мужской Репутация: ![]() ![]() ![]() |
напиши сначала
StringGrid1.RowCount:=2; а при добавлении записи StringGrid1.RowCount:=StringGrid1.RowCount+1;{555} а что значит "размножаться"? -------------------- Objective-C, Unity3d
|
Atreides |
![]()
Сообщение
#20
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
о, щас попробую. Размножаться - это если имя станции одинаковое, то код станции тож должен быть там
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 0:57 |