文本中:
[fsdf][hrhrfsaf][gdsgdsg]這一行.....如何將上面的的字符串提取出“這一行.....”?
也就是說[]裡面的全部不要,包括[]自己也不要?我是菜鳥。莫見笑。謝謝!

解决方案 »

  1.   

    用Pos函数操作,知道你Pos不到']'或'['的时候就可以拷贝了,根据目前你的需要可以只Pos']',或者投机取巧的办法:
    function GetStr(src: string): string;
    var
      SL: TStringLsit;
    begin
      SL := TStringList.Create;
      try
        Text := StringReplace(src, ']', #13#10, [rfReplaceAll]);
        result := SL[SL.count -1];  
      finally
        SL.Free;
      end;
      
    end;
      

  2.   

    [fsdf][hrhrfsaf][gdsgdsg]這一行[这样的情况怎么说]這一行[asdfjka]
      

  3.   

    function DeleteQuoted(
      mString: string;
      mLeft: string = '[';
      mRight: string = ']'
    ): string;
    var
      I: Integer;
    begin
      Result := '';
      while mString <> '' do
      begin
        I := Pos(mLeft, mString);
        if I > 0 then
        begin
          Result := Result + Copy(mString, 1, I - 1);
          Delete(mString, 1, I - 1);
          Delete(mString, 1, Pos(mRight, mString));
        end else
        begin
          Result := Result + mString;
          Break;
        end;
      end;
    end; { DeleteQuoted }procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit2.Text := DeleteQuoted(Edit1.Text);
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      ListString : TStringList;
      Indexof : Integer;
    begin
      ListString:=TStringList.Create;
      ListString.LoadFromFile('C:/123.txt');
      Indexof:=ListString.IndexOf('[fsdf][hrhrfsaf][gdsgdsg]');
      if Indexof >=0 then
      begin
        ListString.Delete(Indexof);
        ListString.SaveToFile('C:/123.txt');
      end;
    end;
      

  5.   

    to chw_csdn_chw,在做游戏开发,研究人与人之间微妙的感情
      

  6.   

    虽然来晚了,也凑个热闹。
    function TForm1.getcorresponding(tmp:string;nPos:integer):Integer;
    var
       nPos1,nPos2:integer;
    begin
         getNext := 0;
         nPos1 := PosEx('[',tmp,nPos + 1);
         nPos2 := PosEx(']',tmp,nPos + 1);
         if (nPos1 > 0 ) and (nPos1 < nPos2) then
         begin
              getNext := nPos2;
              while (nPos1 >0)  and (nPos2 >nPos1) do
              begin
                   nPos1 := PosEx('[',tmp,nPos2 + 1);
                   nPos2 := PosEx(']',tmp,nPos2 + 1);
                   if (nPos1 =0) or (nPos1 > nPos2) then
                   begin
                        if nPos2 > 0 then
                           getNext := nPos2;
                        break;
                   end;
              end;
         end
         else
             getNext := nPos2;
    end;
    procedure TForm1.deletestr1(var tmp:string);
    var
       nPos1,nPos2:integer;
    begin
         nPos1 := PosEx('[',tmp,0);
         while (nPos1 >0) do
         begin
              nPos2 := getcorresponding(tmp,nPos1);
              if nPos2 >nPos1 then
              begin
                   delete(tmp,nPos1,nPos2 - nPos1 + 1);
                   nPos1 := PosEx('[',tmp,0);
              end
              else
                  break;
         end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var tmp :string;
    begin
         tmp := edit1.Text;
         deletestr(tmp);
         edit3.Text := tmp;
    end;