Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.84] |
|
Сообщ.
#1
,
|
|
|
Уважаемые Господа, мне в С очень нравились функции sscanf, fscanf ...
Как такую прелесть реализовать на паскале? К примеру, sprintf, fprintf можно заменить Format(fmtstr, [i, j, ... ]) - WriteLn(f, fmtstr), т.е. ввывод както есть, а ввода не хватает. Я писал с использованием assembler, но как-то кривовато получается |
Сообщ.
#2
,
|
|
|
Эта функция экспортируется библиотеками:
Цитата sscanf C:\WINDOWS\SYSTEM32\crtdll.dll sscanf C:\WINDOWS\SYSTEM32\msvcr70.dll sscanf C:\WINDOWS\SYSTEM32\msvcr71.dll sscanf C:\WINDOWS\SYSTEM32\msvcrt.dll sscanf C:\WINDOWS\SYSTEM32\msvcrt20.dll sscanf C:\WINDOWS\SYSTEM32\msvcrt40.dll sscanf C:\WINDOWS\SYSTEM32\ntdll.dll sscanf C:\WINDOWS\SYSTEM32\pncrt.dll fscanf тоже. |
Сообщ.
#3
,
|
|
|
Спасибо! Прочитал, посмотрел tdump.exe ети dll-ки. В crtdll.dll там все что надо есть.
Но! С пробованием не очень получается . Эти функции принимают переменное число параметров. Я пробовал function cf_sscanf(s: PChar; fmt: PChar; Data: array of Pointer) : Integer; cdecl; external 'crtdll.dll' name 'sscanf'; implementation procedure TForm1.Button1Click(Sender: TObject); var fmt, ds: string; i: integer; s: array[0..32] of Char; begin fmt := '%8d %32s'; ds := Format(fmt, [1, 'privet']); cf_sscanf( PChar(ds), PChar(fmt), [@i, s] ); ShowMessage(IntToStr(i) + ', ' + s); end; не получается. Буду возиться дальше. Но если есть у кого мысли, на этот счет, напишите. |
Сообщ.
#4
,
|
|
|
Цитата ugr @ Эти функции принимают переменное число параметров Попробуй воспользоваться директивой varargs. |
Сообщ.
#5
,
|
|
|
function cf_sscanf(buf:PChar; fmt:PChar):Integer; cdecl varargs; external 'msvcrt.dll' name 'sscanf'; procedure TForm1.Button1Click(Sender: TObject); var fmt, ds: string; i: integer; s: array[0..32] of Char; begin fmt := '%8d %32s'; ds := Format(fmt, [1, 'privet']); cf_sscanf(PChar(ds),PChar(fmt),@i,@s); ShowMessage(IntToStr(i) + ', ' + s); end; |
Сообщ.
#6
,
|
|
|
Огромное всем спасибо!
|
Сообщ.
#7
,
|
|
|
Я все же хотел продолжить єту тему. Мне были приятны ваши ответы. С учетом того, что я работал на 5-ом Delphi, а там эта директива не поддерживается. Пришлось перейти на седьмой. Сравнил я скорости сишныш функций и своего крововатого ассемблера, последний выигрывает. Хотел поделиться с участниками форума этим объектом, да вот незнаю как сюда файл пристегнуть. Весь код в сообщение тащить как-то не очень. Может кому понадобиться, а может кто подрулит, чтобы красивее было и поделится.
Напишите кому интересна эта тема. |
Сообщ.
#8
,
|
|
|
Цитата ugr @ Я все же хотел продолжить єту тему. Мне были приятны ваши ответы. С учетом того, что я работал на 5-ом Delphi, а там эта директива не поддерживается. Пришлось перейти на седьмой. Сравнил я скорости сишныш функций и своего крововатого ассемблера, последний выигрывает. Хотел поделиться с участниками форума этим объектом, да вот незнаю как сюда файл пристегнуть. Весь код в сообщение тащить как-то не очень. Может кому понадобиться, а может кто подрулит, чтобы красивее было и поделится. Напишите кому интересна эта тема. Кажись нашел прикрепил смотрите может кому будет полезно Прикреплённый файлsvIOCtrl.pas (21.03 Кбайт, скачиваний: 332) |
Сообщ.
#9
,
|
|
|
Начал активно тестировать svIOCtrl оказалось неудобно, что
обозначения форматов не совпадают с Format. Переделал. Тестирую. Прошу прощения, но в файле используются некоторые функции из моей библиотеки, сори... Кто смотрел, увидел где заменить. Дотестирую выложу. Правда жаль, что не прокоментировал никто. |
Сообщ.
#10
,
|
|
|
ugr, а если не секрет - а зачем лисопед изобретать? В стандартной библиотеке C/C++ (это которая msvcrt.dll) имеются все нужные тебе ф-ции (как я понял). Причем они:
Так что повторюсь - а стоит все-же лисопед заново конструировать? Или может, все-таки лучше использовать готовые решения? PS: если тебя чем-то не устраивает стандартная C'шная библиотека (я так понял, в данном случае о Delphi'йских ф-циях речь не идет) - обоснуй, плз., если не сложно... чем же она тебе так не угодила? |
Сообщ.
#11
,
|
|
|
Спасибо Krid, что откликнулся. Я уже опечалился, что такая животрепещущая тема, как ввод/вывод никому не интересна. Спасибо!!!
Теперь к сути вопроса. Я когда-то давно программировал на С, но лавров не сыскал а потом в 95 перешел на Delphi и теперь жпть без него не могу. Но всеже мне нравиться как в С проработан ввод/вывод. Согласись! Круто! В Delphi 1,2,3,4,5 varargs не было, я что стащил из TFiler'a, что из исходников Readln... Нувобщем получился тот объект, что в пристегнутом файле. Потом, когда начали упорно советовать varargs я понял, что что-то появилось, а я не заметил Я перешел на седьмой и сравнил скорость. Миллион строк сишные функции читают на моем Cel800 за 4 сек. Мой объект за 2. У меня база в текстовом файле. Строка - объект. Читать свойства, выполнять поиски... Думал может кому еще интересно как бы с диском побысрее поработать. Да и этот объек позволяет "гулять по текстовому файлу как хочешь". Ты его попробуй он очень удобен. Вылезать токо его надо. Ну это дело времени. Хотел критики чтоб быстрее работать |
Сообщ.
#12
,
|
|
|
Цитата ugr @ Миллион строк сишные функции читают на моем Cel800 за 4 сек. Мой объект за 2. Вообще в винде понятие скорости/времени выполнения участка кода - вещь относительная (если не сказать - эфимерная ). Причина - вытесняющая многозадачность (выполнение одного потока может быть в любой момент и на неопределённый период времени прервано другим потоком). Поэтому полагаться на какие-то измерения тут нельзя (в какой-то ситуации C'шная ф-нкция отработает намного быстрее твоей). А твои классы я обязательно посмотрю и опробую, как только выдастся свободное время (в данный момент с этим у меня, увы, очень сильный напряг). Если это того стоит, то можно будет и в FAQ поместить. ЗЫ а где, кстати, svUtils и svConst? |
Сообщ.
#13
,
|
|
|
Цитата Krid @ ЗЫ а где, кстати, svUtils и svConst? бери все, токо не бей и расскажи про ЗЫ и ИМХО, а то я новичок на форумах А Соломона с Русиновичем я читал Прикреплённый файлSOURCE.zip (144.46 Кбайт, скачиваний: 145) |
Сообщ.
#14
,
|
|
|
Сообщ.
#15
,
|
|
|
Тема затронутая в этом разделе оказалась интересна и
другим учасникам форума Jack128 отсылал сюда, но полемика продолжается в теме Обратная Формат. Хотелось бы чтоб народ посмотрел все же реализацию в архиве и покритиковал, дал дельные советы. // Я ведь и обидется могу (комент. jack128) |