Como usar um delimiter específico, importação de nomes?

Delphi

11/11/2019

Olá amigos bom dia, estou com uma dúvida, e preciso de uma ajuda a quem poder fazer esse grande favor.
Estou importante para uma listview os nomes de músicas, para cadastro em um sistema, e o que preciso? Separar nome do artísta com o nome da música.
Então preciso usar o delimitador '' - ''
Como podem ver, é um traço com espaço antes e depois, o porque deste motivo?
As vezes vem músicas com nomes que tem traço mas sem espaço, então ele irá separar só quando tiver o traço com espaço antes e depois:
Exemplo

José Souza - Deixe-me em paz

Como podem ver tem dois traços nesta música, mas quero que ele separe onde tem o traço com espaço:

artista música
José Souza Deixe-me em paz

Então como eu faria isso no código em delphi? como usar um delimiter pra isso?

Obrigado a todos.
Júnior Pinheiro

Júnior Pinheiro

Curtidas 0

Respostas

Jorge Pinto

Jorge Pinto

11/11/2019

Fala Júnior !! Tranquilo ??

Júnior, há anos atrás também tive uma necessidade parecida com a sua e então resolvi desenvolver uma função para fazer essa tarefa,
dá uma olhada no código abaixo:

//SST_Pedaco - Devolve o conteudo de um pedaço de uma string delimitada por uma
//             substring delimitadora.
//Parâmetros:
//             source - String da qual será extraído o resultado.
//             Del    - String delimitadora. Essa string, ou caracter que é mais
//                      comum, nunca fará parte do resultado, servirá apenas para
//                      delimitar(dividir) a source em partes.
//             Index  - Número(posição) da parte a ser resgatada de source.
//
//Retorno:     String - Contera a parte de source que foi extraída.
function SST_Pedaco(Source, Del: string; Index: Integer): string;
var
  Posi, cont, pini: Integer;
  ret: string;

begin
  Ret := '';
  if (Source <> '') and (Del <> '') then
    begin
      posi := Pos(Del, Source);
      if posi < 1 then
        begin
          if Index = 1 then
            Ret := Source
          else
            Ret := ''
        end
      else
        begin
          pini := Pos(Del, Source);
          repeat
            Delete(Source, pini, Length(Del));
            Insert(#1, Source, pini);
            pini := Pos(Del, Source);
          until (pini = 0);
          cont := 0;
          Del := #1;
          repeat
            Inc(cont);
            Ret := '';
            for pini := 1 to posi - 1 do
              Ret := Ret + Source[pini];
            Source := Copy(Source, posi + 1, Length(Source));
            posi := Pos(Del, Source);
            if posi = 0 then
              posi := Length(Source) + 1;
          until cont >= Index;
        end;
    end;
  Result := Trim(Ret);
end;


Vc utiliza ela assim:

terceiroNome := SST_Pedaco("João Augusto Santos", " " , 3);


A variável terceiroNome conterá "Santos"...
ou como no seu caso:

artista := SST_Pedaco("José Souza - Deixe-me em paz", " - " , 1);
musica := SST_Pedaco("José Souza - Deixe-me em paz", " - " , 2);


em artista vc terá "José Souza" e em musica vc terá "Deixe-me em paz" :))

Copia ela e insere em um projeto seu, faça alguns testes... acho que poderá lhe ajudar.

Espero ter ajudado,
Abraço e bons códigos.
GOSTEI 0
POSTAR