Доброго времени суток.
Я знаю, что для этих целей используют flex. Но мне привычней и понятней awk. Есть какой-нибудь способ либо использовать библиотеки awk, либо выполнить вызов самой awk. Нужно написать функцию, которая из входного потока будет брать данные, а на выходе, если этот поток является числом, возвращать строку, иначе NULL или пустая строка.
Можно ли через СИ вызвать AWK с дальнейшей обработкой данных в СИ?
Можно попробовать выполнить awk через семейство вызовов exec. Но идти этим путем не советую.
которая из входного потока будет брать данные, а на выходе, если этот поток является числом, возвращать строку, иначе NULL или пустая строка.
А что мешает написать эту функцию на си ?
Можно попробовать выполнить awk через семейство вызовов exec. Но идти этим путем не советую.
[quote="ivan.tiran"]которая из входного потока будет брать данные, а на выходе, если этот поток является числом, возвращать строку, иначе NULL или пустая строка.
А что мешает написать эту функцию на си ?[/quote]
Слишком много писать, и не факт, что получится без ошибок. Очень много комбинаций будет. Если ещё добавить экспоненциальную форму...
Нужно написать функцию, которая из входного потока будет брать данные, а на выходе, если этот поток является числом, возвращать строку, иначе NULL или пустая строка.
в простом случае system(3), если нужно контролировать только ввод или вывод, то достаточно popen(3), а если нужно и то и другое, или нужен полный контроль над процессом, то придётся ручками через fork(2) и одну из функций семейства exec(3), для контроля ввода-вывода нужны pipe(2) и dup(2).
Доброго времени суток.
Я знаю, что для этих целей используют flex. Но мне привычней и понятней awk. Есть какой-нибудь способ либо использовать библиотеки awk, либо выполнить вызов самой awk. Нужно написать функцию, которая из входного потока будет брать данные, а на выходе, если этот поток является числом, возвращать строку, иначе NULL или пустая строка.
Можно, только это называется "через жопу"
В стандартной библиотеке C функция, которая читает строку из файла, называется fgets(), а а преобразовать её в число с проверкой корректности можно с помощью strtol() или даже sscanf(). Только не советую использовать scanf()/fscsnf() - они с подвохом.
Спасибо всем за информацию. Я понял, что слишком переборщил)))
Не стал рассматривать экспоненциальную форму числа и сделал простенький анализатор, который возвращает строку в случае числа и NULL в случае нечисловых данных.