文本中使用 '*'字符作为每一段的分割,如何将这文本一段一段的读出来

解决方案 »

  1.   

    while not eof(F1) do
    begin
    readln(F1,Str1)    先读一行到字符串STR1
    str:=str+str1;    把余下的字符串再加上现在这一行的字符串
    然后再找是否有*   
    if Pos('*',Str)>1 then
    begin
       LineStr:=copy(str,1,pos('*',str)-1);   取得的第一段
       Str:=copy(str,pos('*',str)+1,Length(str)-Pos('*',str))   余下的文本
    end;
    end;
      

  2.   

    不知道这样会不会提高效率。
    function TabStr(your_string: string): TString;
    var 
      list: TString;
      tmp: string;
      i: integer;
    begin
      tmp:= '';
      List:= TStringList.Create;
      for i:= 1 to Length(your_string) do
        case your_string[i] of
          '*': begin
                 List.add(tmp);
                 tmp:= '';
               end;
          else tmp:= tmp + your_string[i];
        end;
      if Tmp <> '' then List.add(tmp);
      result:= List;
    end;
      

  3.   

    var
      S: String;
    begin
      S := 'abc*dfg*rty98*kk';
      S := StringReplace(S, '*', #13#10, [rfReplaceAll]);
      Memo1.Lines.Text := S;
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  4.   

    测试发现, fengjn(小枫)方法的效率大约是lxpbuaa(桂枝香在故国晚秋)效率的10倍。测试代码如下:
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Memo2: TMemo;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        str: string;
        procedure aa(str: string);
        procedure bb(str: string);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.aa(str: string);
    var
      tmp: string;
      i: integer;
    begin
      tmp:= '';
      memo1.Lines.BeginUpdate;
      for i:= 1 to Length(str) do
        case str[i] of
          '*': begin
                 memo1.Lines.add(tmp);
                 tmp:= '';
               end;
          else tmp:= tmp + str[i];
        end;
      if Tmp <> '' then memo1.Lines.add(tmp);
      memo1.Lines.EndUpdate;
    end;
    procedure TForm1.bb(str: string);
    var
      S: String;
    begin
      S := StringReplace(str, '*', #13#10, [rfReplaceAll]);
      memo2.Lines.BeginUpdate;
      Memo2.Lines.Text := S;
      memo2.Lines.EndUpdate;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      b: int64;
    begin
      memo1.Lines.Clear;
      b:= GetTickcount;
      aa(str);
      memo1.Lines.Add(inttostr(GetTickCount - b));
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      b: int64;
    begin
      memo2.Lines.Clear;
      b:= GetTickcount;
      bb(str);
      memo2.Lines.Add(inttostr(GetTickCount - b));
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      i: integer;
    begin
      for i:= 0 to 9999 do
        str:= Str + 'abcdefghijklmnopqrstuvwxyz' + '*';
    end;end.