Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ненормальный INI-файл  (Прочитано 8274 раз)
0 Пользователей и 1 Гость смотрят эту тему.
NeferSky
Постоялец

ru
Offline Offline
Бессмертный


« : 27-01-2013 14:40 » 

Собственно, задача стоит в том, чтобы прочитать значения из файла. Вот файл:
Код:
[label_Label0]
labelAttributes=444,480,456,480,0
Barcode1=BarcodeEAN,16,116,200,72,0,2
Weight2=Weight,221,94,72,22,0,1,15.000
SpecialText3=FixedText,232,77,48,18,0,0,Вес:
Article4=Article,16,197,412,269,0,12,PLU Description
Date5=PackDate,21,58,120,18,0,0,12/31/2000
Price6=Price,215,58,84,18,0,0,6666.66
SpecialText7=FixedText,232,38,48,18,0,0,цена
Time8=Time,145,58,60,18,0,0,23:59
SpecialText9=FixedText,52,38,120,18,0,0,Упаковано:
SpecialText10=FixedText,57,79,108,18,0,0,Годен до:
Date11=SellDate,21,96,120,18,0,0,12/31/2000
Amount12=Amount,310,58,112,56,0,6,9999.99
Store13=Store,217,168,211,20,0,0,Название магазина
SpecialText14=FixedText,330,38,72,18,0,0,Сумма:
SpecialText15=FixedText,217,136,168,18,0,0,Упаковщик No 5
Advertise16=Advertise,303,116,126,20,0,0,Рекламный текст
SpecialText17=FixedText,217,116,84,18,0,0,t хран.
Shape18=Rectangle,16,36,195,40,1
Shape19=Rectangle,210,36,94,40,1
Shape20=Rectangle,16,75,195,40,1
Shape21=Rectangle,210,75,94,40,1
Shape22=Rectangle,303,36,125,79,1

Может, кто-то узнал, что это этикетка для весов Mettler Toledo 8442 Tiger 3600, созданная программой VisEdit. Я так понимаю, что файл этот лучше прочитать как INI-файл. Вот только возникает проблема: здесь параметры могут иметь почти рандомные имена. Например, Barcode может быть Barcode1, Barcode25, Barcode10 или с любой другой цифрой. Единственное решение, которое приходит мне на ум - 100500 раз пройтись по файлу циклами, типа ReadString('label_Label0', 'Barcode' + IntToStr(i), '0'), но это, по-моему, чересчур кривое решение. А как оптимизировать такое чтение?
Записан

Не тронь налаженный механизм, и он тебя не подведет.
Делать надо хорошо, а плохо - само получится.
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #1 : 27-01-2013 14:49 » 

Вся проблема, что HELP не читаем. Достаточно открыть хелп и посмотреть методы класса TIniFile. А там есть метод ReadSection - как раз то что тебе нужно. На все поиски у тебя ушло бы не больше 2 минут.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 27-01-2013 18:18 » new

zubr, по-моему вопрос был немного о другом: как выяснить, какие Barcode* присутствуют?

NeferSky, дык все записи, содержащие Barcode, обработать - распарсить хвостик с цифрами. Можно регулярным выражением. Зачем цикл на "100500" вариантов?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #3 : 27-01-2013 18:43 » 

Dimka, NeferSky пытался решить задачу методом тыка. То есть делать ReadString('label_Label0', 'Barcode' + IntToStr(i), '0') 100500 раз, если результат '0' (по дефолту), то ключа такого нет. ReadSection возвращает список всех ключей, ну а тут дело техники - пройти по списку и найти все ключи начинающиеся на Barcode.
Записан
NeferSky
Постоялец

ru
Offline Offline
Бессмертный


« Ответ #4 : 27-01-2013 20:13 » 

ReadSection рассматривался в качестве варианта, дело в том, что нужно прочитать ВСЕ значения из файла, не только Barcode - его я для примера привел. Стало быть, прочитав все параметры из файла методом ReadSection придется потом обрабатывать возвращенный список, опять-таки циклом. Хотелось бы избежать циклов - их и так хватит для распатронивания значений типа '444,480,456,480,0' на отдельные цифры...

2 zubr
Похоже, ReadSection действительно единственная адекватная альтернатива. И, кстати, все-таки обидно - форум существует для того, чтобы люди опытом делились, советами и т.п. А если все будут только и делать, что в хелп отправлять - ну, знаете ли... заходить сюда больше не хочется. Почему-то на форуме инженеров (коим я и являюсь) я всегда даю развернутые ответы, и не чморю народ. Потому что ну, бывает. Ну, не знают. Даже не подозревают, что так можно сделать.
В любом случае, спасибо за ответ, буду работать в направлении озвученного метода.
« Последнее редактирование: 27-01-2013 20:56 от NeferSky » Записан

Не тронь налаженный механизм, и он тебя не подведет.
Делать надо хорошо, а плохо - само получится.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 27-01-2013 21:18 » 

NeferSky, разве документацию не надо читать? И чего тут обидного? Ленью попахивает. Ленивых везде не любят.

Ну и что, что весь файл. В чем проблема то? Ищешь понацею?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #6 : 28-01-2013 03:48 » 

Цитата
А если все будут только и делать, что в хелп отправлять - ну, знаете ли... заходить сюда больше не хочется. Почему-то на форуме инженеров (коим я и являюсь) я всегда даю развернутые ответы, и не чморю народ. Потому что ну, бывает. Ну, не знают. Даже не подозревают, что так можно сделать.
Уважаемый NeferSky, да чисто из рациональных соображений (а мы инженеры должны действовать из рациональных соображений), твою задачу гораздо быстрее было решить открыв хелп. Там в классе TIniFile всего с десяток методов. Решением вопроса через хелп на все про все ушло бы не больше 2-5 минут, через форум - могли бы и дни пройти (тут полная зависимость от участников форума). Другое дело, когда сложный случай или в документации неоднозначность в описании (правда в этом случае также зачастую быстрее сделать тестик, чем задавать вопрос на форуме), ну или когда просто не понимаешь.
Извини, если обидел.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines