На главную Наши проекты:
Журнал   ·   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_
  
> Быстрее чем StringReplace
    Столкнулся с проблемой медлительности StringReplace,
    есть файл размером в 9mb там в общем тексте 48000 строк которые нужно удалить\заменить.
    StringReplace делает это за ~15 минут, а Notepad++ за пару секунд.

    Можете что-то посоветовать ?
      awk/sed
        Нашёл у synopse достаточно быстрый StringReplaceAll , мою задачу решает за пару секунд


        ExpandedWrap disabled
            System.Classes.TThread.CreateAnonymousThread(
              procedure
              var  LStopwatch: TStopwatch;
                List: TStringList;  s: string;
                RW: RawUTF8;
           
                RW8: TRawUTF8List;
              begin
                  LStopwatch := TStopwatch.Create;
                  LStopwatch.Start;
           
                  RW8:= TRawUTF8List.Create;
                  RW8.LoadFromFile( '1038.xml' );
                  RW :=  StringReplaceAll(RW8.Text, 'http://', '');
                  RW8.Free;
                  LStopwatch.Stop;
                  mmo1.Lines.Add('Elapsed: ' + LStopwatch.ElapsedMilliseconds.ToString);
           
               end).Start;


        Добавлено
        Цитата Gonarh @
        awk/sed

        :D спасибо Поржал
        Сообщение отредактировано: Jiro -
          StringReplace создаёт копию после каждой модификации - куча копирования в памяти, происходит вымывание кэша, вот оно и тормозит. Нужно какое-то in-place решение, либо порезка строки на части и хранение списка этих буферов, как у CString.
            StringReplace очень тупой и убогий в ~XE1..3, в свежих версиях его неплохо подпилили, теперь он занимает пару экранов, но весьма шустр.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0255 ]   [ 17 queries used ]   [ Generated: 29.03.24, 10:22 GMT ]