Fórum Problemas com índice da String List #405903
02/08/2011
0
Olá pessoal.
Recentemente postei aqui uma dúvida sobre importação de arquivo texto delimitado por barras.(https://www.devmedia.com.br/forum/viewtopic.asp?id=405630)
Com a ajuda dos colegas, obtive sucesso, usando a classe TStrigList.
Agora, estou enfrentando outro problema. Acontece que ao pegar as informações no arquivo, percebi que se existir uma delimitação vazia (||) o índice muda.
Por exemplo:
Quebra.Clear; Readln(Txt,Entrada); ExtractStrings(['|'],[ ],Pchar(Entrada),Quebra);
if Quebra.Strings[0] = 'DDP' Then Begin Importa_SEGURADO.Append; Importa_SEGURADO.FieldValues['NOME']:= Quebra.Strings[1]; Importa_SEGURADO.FieldValues['ENDERECO']:= Quebra.Strings[2]; Importa_SEGURADO.FieldValues['BAIRRO']:= Quebra.Strings[3]; Importa_SEGURADO.FieldValues['CIDADE']:= Quebra.Strings[4]; Importa_SEGURADO.FieldValues['UF']:= Quebra.Strings[5]; Importa_SEGURADO.FieldValues['CEP']:= Quebra.Strings[6]; Importa_SEGURADO.FieldValues['CPF']:= Quebra.Strings[7]; Importa_SEGURADO.FieldValues['IDENTIDADE']:= Quebra.Strings[8]; Importa_SEGURADO.Post; end;
ARQUIVO:
|DDP|JOSÉ SANTOS COBOL|RUA TRINTA, 125, AP 304|SERRA|SALGUEIRO|MG|31995127|777.777.777-77|MG8888|
|DDP|MARIA SHARP|AVENIDA CABRAL DE SÁ, 42||CANTAREIRA|MG|38460028|999.999.999.999-99|MG444|
Na segunda linha do arquivo, o bairro está em branco. É aqui que ocorre o problema. Como são 9 os índices, de 0 a 8, ocorre que na segunda linha, a função só retorna 8, de 0 a 7. No lugar do bairro, que está faltando, ele grava a cidade e assim sucessivamente.
Quando chega em Quebra.Strings[8] retorna erro de índice.
Pelo que li, a função desconsidera os espaços em branco, mas também, pelo que parece, não os conta, para efeito de índice.
Alguém sabe como resolver esse problema?
Recentemente postei aqui uma dúvida sobre importação de arquivo texto delimitado por barras.(https://www.devmedia.com.br/forum/viewtopic.asp?id=405630)
Com a ajuda dos colegas, obtive sucesso, usando a classe TStrigList.
Agora, estou enfrentando outro problema. Acontece que ao pegar as informações no arquivo, percebi que se existir uma delimitação vazia (||) o índice muda.
Por exemplo:
Quebra.Clear; Readln(Txt,Entrada); ExtractStrings(['|'],[ ],Pchar(Entrada),Quebra);
if Quebra.Strings[0] = 'DDP' Then Begin Importa_SEGURADO.Append; Importa_SEGURADO.FieldValues['NOME']:= Quebra.Strings[1]; Importa_SEGURADO.FieldValues['ENDERECO']:= Quebra.Strings[2]; Importa_SEGURADO.FieldValues['BAIRRO']:= Quebra.Strings[3]; Importa_SEGURADO.FieldValues['CIDADE']:= Quebra.Strings[4]; Importa_SEGURADO.FieldValues['UF']:= Quebra.Strings[5]; Importa_SEGURADO.FieldValues['CEP']:= Quebra.Strings[6]; Importa_SEGURADO.FieldValues['CPF']:= Quebra.Strings[7]; Importa_SEGURADO.FieldValues['IDENTIDADE']:= Quebra.Strings[8]; Importa_SEGURADO.Post; end;
ARQUIVO:
|DDP|JOSÉ SANTOS COBOL|RUA TRINTA, 125, AP 304|SERRA|SALGUEIRO|MG|31995127|777.777.777-77|MG8888|
|DDP|MARIA SHARP|AVENIDA CABRAL DE SÁ, 42||CANTAREIRA|MG|38460028|999.999.999.999-99|MG444|
Na segunda linha do arquivo, o bairro está em branco. É aqui que ocorre o problema. Como são 9 os índices, de 0 a 8, ocorre que na segunda linha, a função só retorna 8, de 0 a 7. No lugar do bairro, que está faltando, ele grava a cidade e assim sucessivamente.
Quando chega em Quebra.Strings[8] retorna erro de índice.
Pelo que li, a função desconsidera os espaços em branco, mas também, pelo que parece, não os conta, para efeito de índice.
Alguém sabe como resolver esse problema?
João_sena
Curtir tópico
+ 0
Responder
Posts
03/08/2011
João_sena
Bom pessoal, resolvi o problema.
Lembrei da função StringReplace, que substitui um grupo de strig por outro.
No caso, é só substituir '||' por '|INEXISTENTE|', por exemplo, e não teremos mais problemas com os índices da StringList.
Ficou assim:
var Arquivo: String
Begin
Arquivo:= StringReplace(Entrada, '||', '|INEXISTENTE|', [rfIgnoreCase, rfReplaceAll]);
Quebra.Clear; ExtractStrings(['|'],[ ],Pchar(Arquivo),Quebra);
if Quebra.Strings[0] = 'DDP' Then
etc, etc..........
Espero que isso possa ajudar alguém.
Lembrei da função StringReplace, que substitui um grupo de strig por outro.
No caso, é só substituir '||' por '|INEXISTENTE|', por exemplo, e não teremos mais problemas com os índices da StringList.
Ficou assim:
var Arquivo: String
Begin
Arquivo:= StringReplace(Entrada, '||', '|INEXISTENTE|', [rfIgnoreCase, rfReplaceAll]);
Quebra.Clear; ExtractStrings(['|'],[ ],Pchar(Arquivo),Quebra);
if Quebra.Strings[0] = 'DDP' Then
etc, etc..........
Espero que isso possa ajudar alguém.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)