![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
функция, обратная format [D5, D6, Win2k, WinXP]
MetalFan © (2005-12-07 17:16:00)существуют ли такая? или подскажите библиотеку, где это реализовано!
спасибо за советы!
Anatoly Podgoretsky (2005-12-07 22:30:00) [1]Игорь Шевченко © (07.12.05 18:13) [8]
А что толек, например для sscanf (s, "%s %s %s", strvar1, strvar2, strvar3); и значении 1 2 3 4 5, как только в строке появляются символьные не конце, весь разбор идет боком.
Тоже самое и для Readln который является аналогом и при том не менее общим.
Alexander Panov (2005-12-07 21:28:00) [2]MBo © (07.12.05 21:25) [13]
Совершенно согласен.
Все применимо только к конкретным случаям.
MBo (2005-12-07 21:25:00) [3]>Alexander Panov
Я не являюсь апологетом всеобщей применимости "обратного форматирования", так что убеждать меня ни в чем не надо ;)
Однако при чтении текстовых файлов с жестко заданной структурой я не стеснялся на Паскале использовать Readln(file, X[i], Y[i], Z[i]), что принципиально от scanf не отличается (эта функция, если не ошибаюсь, возвращает количество успешно принятых аргументов).
Здесь встает вопрос о неукоснительном выполнении определенных соглашений передающей и принимающей сторонами - так в этом ничего сверхъестественного нет, все механизмы обеспечения взаимодействия так работают.
Alexander Panov (2005-12-07 20:06:00) [4]MBo © (07.12.05 19:22) [11]
function sscanf(InputStr, FormatStr: PChar): LongInt cdecl varargs; external 'msvcrt.dll' name 'sscanf';
s := Format('%d%d',[11,1]);
Как вернуть исходные параметры?
А если такая:
var
a,b: Integer;
s: String;
begin
Format('%d%d',[a,b]);
?
MBo (2005-12-07 19:22:00) [5]function sscanf(InputStr, FormatStr: PChar): LongInt cdecl varargs; external 'msvcrt.dll' name 'sscanf';
Alexander Panov (2005-12-07 19:08:00) [6]Такой функции нет и не может быть в общем случае ни в одном из языков, так как функция Format не предполагает взаимно-однозначного соответствия.
MetalFan (2005-12-07 19:04:00) [7]На то есть функция (s)scanf в С :))ъ
а на delphi аналог не посоветуете?
Игорь Шевченко (2005-12-07 18:13:00) [8]Digitman © (07.12.05 18:01) [7]
Чтение по формату, обратная (s)printf
sscanf (s, "%s %d %d", strvar, & intvar1, & intvar2);
Digitman (2005-12-07 18:01:00) [9]
> Игорь Шевченко © (07.12.05 17:34) [6]
напомни, что она делает ..
Игорь Шевченко (2005-12-07 17:34:00) [10]Digitman © (07.12.05 17:29) [5]
На то есть функция (s)scanf в С :))
Digitman (2005-12-07 17:29:00) [11]
> разобрать исходную строку на подстроки согласно шаблону
на то есть regular expressions
Reindeer Moss Eater (2005-12-07 17:22:00) [12]Смотри ExtractStrings и всю категорию
string handling routines (null-terminated)
MetalFan (2005-12-07 17:20:00) [13]разобрать исходную строку на подстроки согласно шаблону... вроде как.
хотя вообще-то Вы правы... если шаблон был вида '%s%s%s%s', то конечно обратнимую функцию не сделать...
Digitman (2005-12-07 17:19:00) [14]такой нет и вряд ли быть может.
ибо неисповедимы "извраты" программистов, какую только хрень не задающих в кач-ве формат-шаблонов ..
Reindeer Moss Eater (2005-12-07 17:18:00) [15]В результате выполнения Format получилась строка
"автомотовелофототелерадиомонтер".
Что должна сделать функция обратная Format?