На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Ввод / Вывод , Использование форматного ввода / вывода
    Уважаемые Господа, мне в С очень нравились функции sscanf, fscanf ...
    Как такую прелесть реализовать на паскале? :whistle:

    К примеру, sprintf, fprintf можно заменить Format(fmtstr, [i, j, ... ]) - WriteLn(f, fmtstr),
    т.е. ввывод както есть, а ввода не хватает.

    Я писал с использованием assembler, но как-то кривовато получается :(
      Эта функция экспортируется библиотеками:
      Цитата
      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 тоже.
        Спасибо! Прочитал, посмотрел tdump.exe ети dll-ки. В crtdll.dll там все что надо есть.
        Но! С пробованием не очень получается :(. Эти функции принимают переменное число параметров. Я пробовал

        ExpandedWrap disabled
          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;


        не получается. Буду возиться дальше. Но если есть у кого мысли, на этот счет, напишите.
        Сообщение отредактировано: P.O.D -
          Цитата ugr @
          Эти функции принимают переменное число параметров

          Попробуй воспользоваться директивой varargs.
            ExpandedWrap disabled
              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;
              Огромное всем спасибо! :)
                Я все же хотел продолжить єту тему. Мне были приятны ваши ответы. С учетом того, что я работал на 5-ом Delphi, а там эта директива не поддерживается. Пришлось перейти на седьмой. Сравнил я скорости сишныш функций и своего крововатого ассемблера, последний выигрывает. Хотел поделиться с участниками форума этим объектом, да вот незнаю как сюда файл пристегнуть. Весь код в сообщение тащить как-то не очень. Может кому понадобиться, а может кто подрулит, чтобы красивее было и поделится.
                Напишите кому интересна эта тема. :rolleyes:
                  Цитата ugr @
                  Я все же хотел продолжить єту тему. Мне были приятны ваши ответы. С учетом того, что я работал на 5-ом Delphi, а там эта директива не поддерживается. Пришлось перейти на седьмой. Сравнил я скорости сишныш функций и своего крововатого ассемблера, последний выигрывает. Хотел поделиться с участниками форума этим объектом, да вот незнаю как сюда файл пристегнуть. Весь код в сообщение тащить как-то не очень. Может кому понадобиться, а может кто подрулит, чтобы красивее было и поделится.
                  Напишите кому интересна эта тема. :rolleyes:

                  Кажись нашел прикрепил смотрите может кому будет полезно
                  Прикреплённый файлПрикреплённый файлsvIOCtrl.pas (21.03 Кбайт, скачиваний: 332)
                    Начал активно тестировать svIOCtrl оказалось неудобно, что
                    обозначения форматов не совпадают с Format. Переделал. Тестирую.
                    Прошу прощения, но в файле используются некоторые функции из
                    моей библиотеки, сори... Кто смотрел, увидел где заменить. Дотестирую выложу.
                    Правда жаль, что не прокоментировал никто. :(
                      ugr, а если не секрет - а зачем лисопед изобретать? В стандартной библиотеке C/C++ (это которая msvcrt.dll) имеются все нужные тебе ф-ции (как я понял). Причем они:
                      • Легко подключаются к программам на Delphi (см. пример)
                      • Оптимизированы по самое некуда - ну столько лет столько людей их оптимизировали! :)
                      • Начиная с Windows 95 OSR2 эта библиотека идет как стандартная в поставке Windows (используется, например, Explorer'ом)

                      Так что повторюсь - а стоит все-же лисопед заново конструировать? Или может, все-таки лучше использовать готовые решения?

                      PS: если тебя чем-то не устраивает стандартная C'шная библиотека (я так понял, в данном случае о Delphi'йских ф-циях речь не идет) - обоснуй, плз., если не сложно... чем же она тебе так не угодила?
                        Спасибо Krid, что откликнулся. Я уже опечалился, что такая животрепещущая тема, как ввод/вывод никому не интересна. Спасибо!!!
                        Теперь к сути вопроса. Я когда-то давно программировал на С, но лавров не сыскал а потом в 95 перешел на Delphi и теперь жпть без него не могу. Но всеже мне нравиться как в С проработан ввод/вывод. Согласись! Круто! В Delphi 1,2,3,4,5 varargs не было,
                        я что стащил из TFiler'a, что из исходников Readln... Нувобщем получился тот объект, что в пристегнутом файле. Потом, когда начали упорно советовать varargs я понял, что что-то появилось, а я не заметил
                        :o Я перешел на седьмой и сравнил скорость. Миллион строк сишные функции читают на моем Cel800 за 4 сек. Мой объект за 2. У меня база в текстовом файле. Строка - объект.
                        Читать свойства, выполнять поиски...
                        Думал может кому еще интересно как бы с диском побысрее поработать. Да и этот объек позволяет "гулять по текстовому файлу как хочешь". Ты его попробуй он очень удобен. Вылезать токо его надо. Ну это дело времени. Хотел критики чтоб быстрее работать :unsure:
                          Цитата ugr @
                          Миллион строк сишные функции читают на моем Cel800 за 4 сек. Мой объект за 2.

                          Вообще в винде понятие скорости/времени выполнения участка кода - вещь относительная (если не сказать - эфимерная :) ). Причина - вытесняющая многозадачность (выполнение одного потока может быть в любой момент и на неопределённый период времени прервано другим потоком). Поэтому полагаться на какие-то измерения тут нельзя (в какой-то ситуации C'шная ф-нкция отработает намного быстрее твоей).
                          А твои классы я обязательно посмотрю и опробую, как только выдастся свободное время (в данный момент с этим у меня, увы, очень сильный напряг). Если это того стоит, то можно будет и в FAQ поместить.

                          ЗЫ а где, кстати, svUtils и svConst? ;)
                            Цитата Krid @
                            ЗЫ а где, кстати, svUtils и svConst? ;)

                            бери все, токо не бей :)

                            и расскажи про ЗЫ и ИМХО, а то я новичок на форумах :unsure:

                            А Соломона с Русиновичем я читал
                            Прикреплённый файлПрикреплённый файлSOURCE.zip (144.46 Кбайт, скачиваний: 145)
                              Цитата ugr @
                              и расскажи про ЗЫ и ИМХО, а то я новичок на форумах

                              это тебе сюда: Что такое сабж ?
                                Тема затронутая в этом разделе оказалась интересна и
                                другим учасникам форума Jack128 отсылал сюда, но полемика продолжается
                                в теме Обратная Формат. Хотелось бы чтоб народ посмотрел все же реализацию
                                в архиве и покритиковал, дал дельные советы.


                                // Я ведь и обидется могу (комент. jack128)
                                Сообщение отредактировано: jack128 -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0600 ]   [ 16 queries used ]   [ Generated: 11.12.24, 03:48 GMT ]