Читаю строки из файла (fgets). Пример строки: "1234 17a4 "bla-bla-bla"\n" (формат: шестнадцатиричное-число пробелы-или-табуляция шестнадцатиричное-число пробелы-или-табуляция строка-данных-в-кавычках). Как разбить эту строку на составные части (на ассемблере просто -- руками, а как на Си?), причём, не просто разбить, но и проверить на правильность (что числа -- действительно числа, между ними whitespace, строка в кавычках, а после неё только \n). Что-то вроде sscanf(..., "%x%*[\x20\t]%x%*[\x20\t]%*[\"]%32s%*[\"]%*[\n]", ...) (тоже мне, регэксп, блин!), но тогда никак не узнать, были ли в конце кавычка и \n, а при указании строки-данных больше 32 символов какие-то странные глюки. Помогите! PS: Всё моё общение с scanf/sscanf раньше ограничивалось "%d"... PPS: А может, есть способ проще? Может, стоит строку руками разбивать?
iZzz32 ну зачем мучатся? делай как сказал IceStudent! качай pcre(regexp) c http://gnuwin32.sourceforge.net и будет у Вас всё чётко и красиво
iZzz32 Руками — это по-нашему. В конце концов, не такая сложная грамматика в твоём случае, велосипед вполне сойдёт, если будет работать и устроит тебя. Просто regexp — дёшево и сердито
так ведь заморока в том, что приведённая строка scanf делает почти то что надо... если бы автор ещё только собирался бы её сочинять, не зная что есть scanf, то, пожалуй, велосипед был бы проще. а так... насчёт %32s, может лучше написать %32[^"]? и, я точно не помню, но разве 32 должна стоять в поле width? по-моему в precision. а проверить наличие "\n -- тут либо воспользоваться %n -- которая пишет в очередной аргумент количество прочитанных символов, либо читать их в переменную, и разглядывать потом что scanf return'ом вернула.
Небольшой оффтоп На тему руками вспомнилось... Тут не так давно на РБК канале показывали передачу про IT технологии и компании Там какая-то западная компания проводила исследования насчёт успешности проектов и сроков сдачи... На первом месте ГОЛЛАНДЦЫ на последнем мы!!!!!!!!!!!!!! Если бы они перед этим провели исследования чьи коммерсанты самые жадные и безбашенные на сроки - то мы бы точно только по этому на последнем месте не были!!!! А ещё эти чёртовы велосипеды тормозят нас до невозможности!!!!! Ну возьми ты паблик путный и пользуйся. Но нет мы сами! Хочеш отличится - сделай то чего нет и положи на паблик Используй чужое и делись за это своим... Так сложно???????????
wsd, к сожалению, я не юниксоид, и не могу себе позволить из-за такой ерунды таскать за собой ещё и библиотеку-камаз для работы с регэкспами… Я уж как-нибудь сам, на велосипеде... r90 спасибо, значит, с sscanf продолжу (плохо я читал документацию, плохо!).