Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

функция, обратная 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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо