На главную Наши проекты:
Журнал   ·   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_
  
> Удаление от начала / от конца строки / Delphi XE4
    Сделал вот так (Но файлы размером в 500 мегабайт не обрабатывает - нехватка памяти):

    ExpandedWrap disabled
      procedure TForm1.Button1Click(Sender: TObject);
      var t:TStringList;
          s: string;
          k,n,i: integer;
      begin
      n:=strtoint(Edit1.Text);//удалить в начале
      k:=strtoint(Edit2.Text);//удалить в конце
      t:=TStringList.Create;
      t.LoadFromFile('1.txt');//файл в папке с программой
      for i:=0 to t.Count-1 do
       begin
        s:=t[i];
        if k>=length(s) then s:=''
        else delete(s,length(s)-k+1,k);
        if n>=length(s) then s:=''
        else delete(s,1,n);
        t[i]:=s;
       end;
      t.SaveToFile('2.txt');
      t.Free;
      ShowMessage('Файл 1.txt преобразован и записан в файл 2.txt')
      end;


    Как переделать через: AsssignFile, Reset/Rewrite, CloseFile то есть читать по строкам а не загружать в память.
      Так попробуй:
      ExpandedWrap disabled
        Var
          FIn,FOut:TextFile;
          s: string;
          k,n,i: integer;
        begin
         
        n:=strtoint(Edit1.Text);//удалить в начале
        k:=strtoint(Edit2.Text);//удалить в конце
         
          AssignFile(FIn,'1.txt');
          AssignFile(FOut,'2.txt');
          Reset(FIn);
          Rewrite(FOut);
         
            While not EOF(FIn) do
              begin
                ReadLn(FIn,s);
                  if k>=length(s) then s:='' else delete(s,length(s)-k+1,k);
                  if n>=length(s) then s:='' else delete(s,1,n);
                WriteLn(FOut,s);
              end;
         
          CloseFile(FOut);
          CloseFile(FIn);
         
        End;
        ^D^imaПомог, спасибо!
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0197 ]   [ 17 queries used ]   [ Generated: 16.04.24, 08:46 GMT ]