
BG Development · За реклама · За контакти |
![]() ![]() ![]() ![]() ![]() |
Здравей! ( Включване | Регистриране ) |
Страници: (2) [1] 2 ( Първото ново мнение ) | ![]() ![]() ![]() |
avsrm |
Публикувано на: 31-05-2022, 18:19
|
||
Име: Но Група: Потребител Ранг: Новопостъпил Мнения: 23 Регистриран на: 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 Ранг: Почетен член Мнения: 5002 Регистриран на: 12.07.05 ![]() |
Взимаш първият срещнат текстов редактор и пишеш простичък regexp който трие всичко, освен втората колона.
Още по-прост вариант - махаш всички излишни шпации и табове, че да останат по една между полетата, после зареждаш файла с Excel като CSV файл с разделител шпация и получаваш данните по колони. -------------------- I find your lack of faith disturbing
|
Антон Яначков |
Публикувано на: 31-05-2022, 20:12
|
||
Име: Антон Яначков Група: Потребител Ранг: Почетен член Мнения: 2633 Регистриран на: 27.07.16 ![]() |
Пиша ти решението на Vb6 защото този език харесвам, но идеята лесно можеш да си я преработиш на всякакъв език, използвайки коментарите, които съм сложил:
А това е картинка на формата и резултата: ![]() |
||
Дон Реба |
Публикувано на: 01-06-2022, 07:49
|
||
Име: Група: Потребител Ранг: Почетен член Мнения: 9720 Регистриран на: 11.11.06 ![]() |
за съжаление вградените инструменти на С/С++ не са удобни за парсване на текстова информация, най-вече защото 1. не връщат броя обработени символи, а броя обработени аргументи и 2. новия ред е просто "бял" символ. 3 форматиращия стринг на sscanf не бачка по начина който се очаква (аналогично на printf). цин и цоут изобщо не ги дискутирам, те стават само за курсови работи . в твоя случай , ако често ти се налагат подобнизадачи, най-добре се подготви със някакви помощни инструменти, които да ползваш винаги като опреш до такава ситуация. в конкретния случай , дори само функция която копира стринг до ретърн и връща бройката символи ще свърши чудесна работа. ако имаш такава череш ред, после със sscanf вземаш втория стринг и така до края
Това мнение е било редактирано от Дон Реба на 01-06-2022, 07:51 |
||
thrawn |
Публикувано на: 01-06-2022, 08:07
|
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 3341 Регистриран на: 17.01.17 ![]() |
Не може да няма някакви библиотеки с имплементация на регулярни изрази. Практически това се решава с един регулярен израз, както каза dvader (като в него се залага и контрол за валидност на полетата).
Не може ли да се ползва нещо подобно? Иначе, най-тъпото което се сещам - прави се парсер на произволен език който да генерира хедър файл с желания масив като константа или направо бинарен файл. |
ici |
Публикувано на: 01-06-2022, 09:29
|
||
![]() ![]() Име: Ивайло Илчев Група: VIP Ранг: Почетен член Мнения: 17890 Регистриран на: 06.06.04 ![]() |
-------------------- Ние не сме в една лодка, ние сме в една буря. Лодките са различни.
Следващият път когато се почувстваш ненужен, грозен и недооценен, помни че освен това си и тъп. |
||
Bender++ |
Публикувано на: 01-06-2022, 09:43
|
![]() Име: Група: Потребител Ранг: Редовен член Мнения: 334 Регистриран на: 18.04.21 ![]() |
това се прави елемнтарно с краен автомат, не трябват никакви реглулярни изрази (въпреки че и те са крайни автомати) и библиотеки
Даже може само да четеш ред по ред и в един цикъл и сплитваш по разделител Това мнение е било редактирано от Bender++ на 01-06-2022, 09:45 -------------------- Ваксините са лъжа и НЕ работят! Не на ковид фашизма!
Слава на Цар Путин! Долу украинските фашисти! Слава на героите - Z V |
avsrm |
Публикувано на: 01-06-2022, 11:45
|
||
Име: Но Група: Потребител Ранг: Новопостъпил Мнения: 23 Регистриран на: 21.01.08 ![]() |
/краен автомат/ стеит машина ли визираш !!! Имах правен DataProcessor за пакети с хедър и end с вариеибъл lenght. Там мисля че прихващах процес и следях пакетите , ще се разровя да погледна как ставаше че съм забравил. Няма да е лесно защото трябва да изключа всички възможности за грешка, че иначе ще има взривове ![]() ici Поздрави след толкова години. Това мнение е било редактирано от avsrm на 01-06-2022, 11:52 -------------------- Знам само малко от Borland Builder C++ 6.
|
||
ici |
Публикувано на: 01-06-2022, 15:21
|
||
![]() ![]() Име: Ивайло Илчев Група: VIP Ранг: Почетен член Мнения: 17890 Регистриран на: 06.06.04 ![]() |
Да не сме работили заедно? -------------------- Ние не сме в една лодка, ние сме в една буря. Лодките са различни.
Следващият път когато се почувстваш ненужен, грозен и недооценен, помни че освен това си и тъп. |
||
ici |
Публикувано на: 01-06-2022, 15:48
|
||||
![]() ![]() Име: Ивайло Илчев Група: VIP Ранг: Почетен член Мнения: 17890 Регистриран на: 06.06.04 ![]() |
-------------------- Ние не сме в една лодка, ние сме в една буря. Лодките са различни.
Следващият път когато се почувстваш ненужен, грозен и недооценен, помни че освен това си и тъп. |
||||
![]() |
![]() ![]() ![]() |