Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

scanf: миф или правда

2.0K
30 мая 2004 года
Elf
19 / / 11.12.2002
Здравствуйте, все!

Не поможет ли кто мне:
говорят функция scanf может разобрать любой формат. Как мне разобрать формат вида:
string1|string2|.....?

Заранее благодарен
310
30 мая 2004 года
fellow
853 / / 17.03.2003
Да, может, если приблизительно 99,9% кода написать вручную, и в нужном месте вставить один вызов scanf.

Если Вас интересует разбор регулярных выражений, то лучше поискать соответствующую библиотеку, или внешнюю утилиту.
7.4K
02 июня 2004 года
burashka
12 / / 02.06.2004
Истину глаголит!
Ибо юзай pcre! в булдере она(библа с хидером и , видимо дллина тоже) есть - хотя про неё ни слова в хелпе нет, просто инклюдишь pcre.h ищешь в инете описание библы...можешь взять ещё ключевое слово : pcre_exec :) парсит всё!
Можно воспользоваться цивильной оболочкой от SysTools - поискай на сорсфордже, это пакет классных утилит завёрнутых в компоненты - интерпритаторы мат выражений, регэкспы, математика повышеной точности и т.д.
2.0K
03 июня 2004 года
Elf
19 / / 11.12.2002
Я как писатель под Линуксом борландские навороты пользовать не могу. (хотя люблю) вообще я решил задачу через strsep (она в АНСИ не входит но современные компили её имеют) она разделяет строку
char *strsep(char **str, char *delim);
возвращяет строку до delim в str записывает str после delim(delim не включается). Просто и сердито. Спасибо кто откликнулся
7.4K
03 июня 2004 года
burashka
12 / / 02.06.2004
PCRE - Posix Regular Expressions - это далеко не билдеровский навороты и как писатель под линукс Вы должны знать об этом лучше меня :)))) Это потом по просьбам нуждающихся регулярные выражения были портированы почти подо всё! для простого случая может их и не стоит использовать но что-нить более-менее сложное - просто незаменимо, один раз попробовал, без них больше немогу.
2.0K
03 июня 2004 года
Elf
19 / / 11.12.2002
Сорри, обознался.:roll: Все равно они в ANSI C не входят, как впрочем и функция strsep. Правда последняя все же более переносима. Я где-то видел переделанный scanf специально обученный для разбора всего чего угодно. Но не помню где. Проще самому написать, потом кайфовать.
6.7K
04 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Elf
Здравствуйте, все!

Не поможет ли кто мне:
говорят функция scanf может разобрать любой формат. Как мне разобрать формат вида:
string1|string2|.....?

Заранее благодарен


Я могу сказать одно: нужно поюзать POSIX-совместимый заголовочный файл <string.h>. Как в Windows, так и в *NIX-ах заголовочный имеет однотипный формат. Например имеем следующее:

Код:
...
char *String;
//указатель на текстовую строку
//неопределенной длины. Никакой
//разницы нет, если вместо указателя
//явно определить строку,
//типа
char String1[32];
...
int StrLenth;
StrLenth=strlen(String);
//имеем длину строки, т.е. количество символов
//есть ньюанс с Юникодом (UTF8), в котором
//один не английский символ определяется
//двух-байтным числом
...
strcpy(String1, String);
//копируем в String1 текст со String.
//надо заметить, что длина String может превышать
//длину String1. Поэтому все данные
//(в нашем случае длина String1 - 32 байта)
//которые выходят за 32 байта потеряются.
//Эту операцию можно проводить и над указателем,
//но предварительно под указатель надо отвести
//память (malloc)
...
strncpy(String1, String, 5);
//тоже, что и strcpy, отличается (5) явным
//указанием количества копируемых байт
...
//в свое время я ипользовал конструкции типа:
int s=5; //смещение байт
strncpy(String1+s, String, 2);
//Если у нас была строка String1
//то в данном случае мы имеем копирование
//первых 2-х байт строки String в строку
//String1 со смещением в 5 байт
...

Если у вас имеется ненумерованный список, типа множества строк: char *String1, *String2,...
тогда не обойтись без двойного указателя на массив этих строк. Например, char **AllStrings;
Но логика работы с конструкциями такого типа на порядок запутаннее чем работа с указателями.
6.7K
04 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Elf
Сорри, обознался.:roll: Все равно они в ANSI C не входят, как впрочем и функция strsep. Правда последняя все же более переносима. Я где-то видел переделанный scanf специально обученный для разбора всего чего угодно. Но не помню где. Проще самому написать, потом кайфовать.


А может быть имеет смысл воспользоваться функцией sscanf() ?
Например так:

 
Код:
...
char *TextString;
int Value;
...
//Предположим, что TextString указатель на
//строку, которая содержит какое-то число,
//которое нам нужно поиметь в виде int
sscanf(&TextString, "hu", Value);
...

Причем у sscanf множество флажков (типа "hu" - это int) под самые различные типы данных. Смотрите help на эту функцию.
7.2K
04 июня 2004 года
Антидот
10 / / 03.06.2004
Иными словами, вам нужна функция с переменным числом параметров... я могу предоставить пример написания этой функции с разбором параметров... правда, не сейчас... :{ домой ещё надо сходить... =)
7.2K
04 июня 2004 года
Антидот
10 / / 03.06.2004
нашёл любопытную ссылку ... возможно, это поможет...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог