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

11/11/2019

0

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

Responder

Posts

14/11/2019

Jorge Pinto

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.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar