Problemas com índice da String List
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
Curtidas 0
Respostas
João_sena
02/08/2011
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.
GOSTEI 0