比如MP3名字:周杰伦 - 菊花台.mp3我要根据提取出字符串中的歌手和歌曲名字
按这样的定义提取%(Artist) - %(Title)%(Artist)和%(Title)有时候要倒过来用,比如%(Title) - %(Artist)也就是说我设置一个Edit,根据里面的:%(Title) - %(Artist)排列的先后来分割歌曲名字,中间可能是其他符号新手,没有想通怎么搞。。智商不行啊!

解决方案 »

  1.   

    pos()函数,用中间的符号进行分割
      

  2.   

    以前写的分割用的function SplitStr(Source, Ch: String): TStringList;
    var
      Temp: String;
      I, K: Integer;
    begin
      Result := TStringList.Create;
      if Source='' then Exit;
      Temp := Source;
      K := Length(Ch);
      if K = 0 then Exit;
      I := Pos(Ch, Source);
      if I > 0 then
        while I <> 0 do
        begin
           Result.Add(Copy(Temp, 1, I - 1));
           Delete(Temp, 1, I + K - 1);
           I := Pos(Ch, Temp);
        end;
      Result.Add(Temp);
    end;
      

  3.   


    var
      str:Tstrings;
      s:string;
    begin
      str:=Tstringlist.create;
      str.clear;
      extractstrings(['-'],[],pchar(s),str);
      str.strings[0]就是歌手
      str.strings[1]就是歌曲名
    end;
      

  4.   


    不是,我的意思是,
    设置一个Edit,根据里面的:%(Title) - %(Artist)排列的先后来分割歌曲名字,中间的“ - ”可以改变成其他符号,当交换%(Title)和%(Artist)的前后位置后,分割自动改变
      

  5.   

    就和千千静听的根据文件名获取标签一样的
    有时候这样用:%(Artist) - %(Title)
    有时候可能这样:%(Artist)\%(Title)或者%(Title)-%(Artist)
      

  6.   

    另一实现方法procedure TForm1.Button1Click(Sender: TObject);
    var
      t:TStringList;
    begin
      t:= TStringList.Create;
      t.Delimiter:='-';
      t.DelimitedText:='%(Artist) - %(Title)';  //具体内容
      Edit1.Text:=copy(t.Strings[0],3,length(t.Strings[0])-3);
      Edit2.Text:=copy(t.Strings[1],3,length(t.Strings[1])-3);
      t.Free;
    end;如果%(Artist)和%(Title)有时候要倒过来用,那就要看行中有无这样的判断信息了
    还有的方法可用正则表达式,网上有控件的