| BG Development · За реклама · За контакти |
Помощ Търсене Потребители Календар Правила |
| Здравей! ( Включване | Регистриране ) |
| Страници: (2) [1] 2 ( Първото ново мнение ) | ![]() ![]() ![]() |
| avsrm |
Публикувано на: 31-05-2022, 18:19
|
||
|
Име: Но Група: Потребител Ранг: Посетител Мнения: 115 Регистриран на: 21.01.08 |
Здравейте Имам генериран текстови файл с информация. Това са кодове към машина ... по различно е от G кодовете за CNC-тата. Трябва да добавя възможност да отделя точно определена информация от файла за други цели. Информацията върви на редове, като всеки ред почва с номер на двойката цифри, От 00000 до 99999. Трябва ми отделена само втората колона като масив. buf[.....]=(EE,EE,FE,CD,FE,FE,91,45,9B ...FF,FF); Индекса на буфера е известен, между първите 5 знака с номера има еднакво на брой паузи %20 , всеки ред завършва с каретка и LF. На ред -данните които ми трябват са възможни само двойки знаци , като са от една до 4 двойки. Ако е възможно на чисто C . Опитах да търся примерно със strstr(); Но резултата никак не ми хареса ... Не ми е силата тук. Търся някакви насоки или някакъв примерен код за подобни задачи... Поздрави.
-------------------- Знам само малко от Borland Builder C++ 6.
|
||
| dvader |
Публикувано на: 31-05-2022, 19:49
|
![]() Име: Валерий Тодоров Група: VIP Ранг: Почетен член Мнения: 5419 Регистриран на: 12.07.05 |
Взимаш първият срещнат текстов редактор и пишеш простичък regexp който трие всичко, освен втората колона.
Още по-прост вариант - махаш всички излишни шпации и табове, че да останат по една между полетата, после зареждаш файла с Excel като CSV файл с разделител шпация и получаваш данните по колони. -------------------- I find your lack of faith disturbing
|
| Антон Яначков |
Публикувано на: 31-05-2022, 20:12
|
||
|
Име: Антон Яначков Група: Потребител Ранг: Почетен член Мнения: 3406 Регистриран на: 27.07.16 |
Пиша ти решението на Vb6 защото този език харесвам, но идеята лесно можеш да си я преработиш на всякакъв език, използвайки коментарите, които съм сложил:
А това е картинка на формата и резултата: |
||
| Дон Реба |
Публикувано на: 01-06-2022, 07:49
|
||
|
Име: Група: Потребител Ранг: Почетен член Мнения: 10496 Регистриран на: 11.11.06 |
за съжаление вградените инструменти на С/С++ не са удобни за парсване на текстова информация, най-вече защото 1. не връщат броя обработени символи, а броя обработени аргументи и 2. новия ред е просто "бял" символ. 3 форматиращия стринг на sscanf не бачка по начина който се очаква (аналогично на printf). цин и цоут изобщо не ги дискутирам, те стават само за курсови работи . в твоя случай , ако често ти се налагат подобнизадачи, най-добре се подготви със някакви помощни инструменти, които да ползваш винаги като опреш до такава ситуация. в конкретния случай , дори само функция която копира стринг до ретърн и връща бройката символи ще свърши чудесна работа. ако имаш такава череш ред, после със sscanf вземаш втория стринг и така до края
Това мнение е било редактирано от Дон Реба на 01-06-2022, 07:51 |
||
| thrawn |
Публикувано на: 01-06-2022, 08:07
|
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 3864 Регистриран на: 17.01.17 |
Не може да няма някакви библиотеки с имплементация на регулярни изрази. Практически това се решава с един регулярен израз, както каза dvader (като в него се залага и контрол за валидност на полетата).
Не може ли да се ползва нещо подобно? Иначе, най-тъпото което се сещам - прави се парсер на произволен език който да генерира хедър файл с желания масив като константа или направо бинарен файл. |
| ici |
Публикувано на: 01-06-2022, 09:29
|
||
![]() Име: Ивайло Илчев Група: VIP Ранг: Почетен член Мнения: 19077 Регистриран на: 06.06.04 |
-------------------- Facebook is a bit like checking your underwear after a fart.
Most likely there's nothing new and if there is it's probably shit. |
||
| Bender++ |
Публикувано на: 01-06-2022, 09:43
|
![]() Име: Група: Потребител Ранг: Старо куче Мнения: 608 Регистриран на: 18.04.21 |
това се прави елемнтарно с краен автомат, не трябват никакви реглулярни изрази (въпреки че и те са крайни автомати) и библиотеки
Даже може само да четеш ред по ред и в един цикъл и сплитваш по разделител Това мнение е било редактирано от Bender++ на 01-06-2022, 09:45 -------------------- Слава на Цар Путин! Долу украинските фашисти!
|
| avsrm |
Публикувано на: 01-06-2022, 11:45
|
||
|
Име: Но Група: Потребител Ранг: Посетител Мнения: 115 Регистриран на: 21.01.08 |
/краен автомат/ стеит машина ли визираш !!! Имах правен DataProcessor за пакети с хедър и end с вариеибъл lenght. Там мисля че прихващах процес и следях пакетите , ще се разровя да погледна как ставаше че съм забравил. Няма да е лесно защото трябва да изключа всички възможности за грешка, че иначе ще има взривове ici Поздрави след толкова години. Това мнение е било редактирано от avsrm на 01-06-2022, 11:52 -------------------- Знам само малко от Borland Builder C++ 6.
|
||
| ici |
Публикувано на: 01-06-2022, 15:21
|
||
![]() Име: Ивайло Илчев Група: VIP Ранг: Почетен член Мнения: 19077 Регистриран на: 06.06.04 |
Да не сме работили заедно? -------------------- Facebook is a bit like checking your underwear after a fart.
Most likely there's nothing new and if there is it's probably shit. |
||
| ici |
Публикувано на: 01-06-2022, 15:48
|
||||
![]() Име: Ивайло Илчев Група: VIP Ранг: Почетен член Мнения: 19077 Регистриран на: 06.06.04 |
-------------------- Facebook is a bit like checking your underwear after a fart.
Most likely there's nothing new and if there is it's probably shit. |
||||
Страници: (2) [1] 2 |
![]() ![]() ![]() |