Технический форум по робототехнике.
aleksandr2677 » 25 ноя 2012, 15:06
Добрый день, помогите пожалуйста разобраться с парсингом.
Пробую выводить на терминал символы с помощью такого кода:
char str1[10], str2[10];
scanf("%s%s", str1, str2);
printf("\n%s\n%s",str1,str2);
Так всё получается, все символы которые пришли выходят на терминал. Однако когда я добавляю в код []для исключения принимаемых символов, на терминал выходят пустые значения.
char str1[10], str2[10];
scanf("%[^0123456789]%s", str1, str2);
printf("\n%s\n%s",str1,str2);
Вроде вставляю в проект готовые примеры из найденных статей, но ничего не работает(
Гляньте мой файлик. В архиве лежат проекты Codevision, VMlab и Proteus
- Вложения
-
SSCANF.rar
- (89.92 КиБ) Скачиваний: 0
elmot » 25 ноя 2012, 15:42
ВВод-то какой?
aleksandr2677 » 25 ноя 2012, 16:00
Ввожу с терминала или считываю массив с помощью sscanf.
elmot » 25 ноя 2012, 16:27
Так ЧТО вводится? Что с терминала - это я вижу.
aleksandr2677 » 25 ноя 2012, 16:46
Ну вобще я планирую разложить по полочкам данные которые приходят с GPS модуля EB 500.
$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,*10
$GPVTG,309.62,T,,M,0.13,N,0.2,K*6E
$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18
Сейчас я пытаюсь научится обрабатывать строку, ну например, abcd12345ifg хочу раскидать её на 3 массива, "abcd" "12345" "ifg" .
И собственно не могу понять почему scanf("%s", str1); работает
а scanf("%[^0123456789]", str1); не работает?
elmot » 25 ноя 2012, 17:47
scanf("%[^0123456789]", str1); не работает?
Этот сканф, по идее, должен взять последовательность нецифр в начале ввода. И, если он ее нашел, вернуть единицу.
Лично я NMEA парсю вот таким матюгом:
- Код: Выделить всё • Развернуть
double fTime;
int aTime;
char aLat[11];
char aLng[11];
float aSog;
float aCog;
int varCount = sscanf(nmeaLine,"$GPRMC,%lf,%c,%7s%*d,%c,%8s%*d,%c,%f,%f,%*6s,%*f,%*c",
&fTime, &state,
&aLat[1],aLat,&aLng[1],aLng,
&aSog,&aCog);
Romikgy » 25 ноя 2012, 19:42
что то я не слышал , что бы sscanf понимал regexp ....
elmot » 25 ноя 2012, 19:45
Это не regexp, хотя немного похож. По доке должно работать, но я сам не пробовал.
Romikgy » 25 ноя 2012, 19:48
по какой доке?
elmot » 25 ноя 2012, 19:52
Romikgy » 25 ноя 2012, 20:15
что то я того же в доках по winavr gcc не вижу ....
aleksandr2677 » 25 ноя 2012, 21:01
Что то начинает вырисовываться, сейчас поэкспериментирую.
И всё таки по поводу такой записи
char str1[10], str2[10];
scanf("%[0123456789]%s", str1, str2);
printf("\n%s\n%s",str1,str2);
Если верить статье
http://www.realcoding.net/articles/funktsii-standartnogo-vvodavyvoda-printf-scanf.htmlто если на терминале ввести набор символов:
12345abcdefg456
На экране программа выдаст:
12345
abcdefg456
А у меня терминал VM lab выдаёт только <LF> а в окне Watch напротив str1 и str2 <NUL>,<NUL>,<NUL>,...
Что же я делаю не так? Может глянете мой проект.
elmot » 25 ноя 2012, 21:19
Возможно сишная библиотека для АВР не держит такой формат
aleksandr2677 » 26 ноя 2012, 21:38
У меня такое ощущение что библиотека для avr такой
- Код: Выделить всё • Развернуть
%lf
функции тоже не содержит(
Aseris » 26 ноя 2012, 21:56
Обработка на чем прводится PC/MC?