O que acontece com a String?
Ao ler um arquivo de texto qualquer (seja de 2 kb a 30 MB), em uma TStringList, ao salva-lo em uma variavel widestring com o método .Text sempre desaparecem alguns caracteres do final do arquivo. Não descobri uma lógica nem um padrão para isso, em um teste que fiz, um arquivo de 2 kb chegou a desaparecer mais caracteres que um de 16 mb.
Alguem sabe o motivo? Segue abaixo o código utilizado...
var
teste: TStringList;
teste2: widestring;
begin
teste := TStringList.Create;
teste.LoadFromFile(´teste.txt´);
teste2 := teste.Text;
AssignFile(f, ´teste2.txt´);
Rewrite(f);
write(f, teste2);
end;
Rândallo Prux
Alguem sabe o motivo? Segue abaixo o código utilizado...
var
teste: TStringList;
teste2: widestring;
begin
teste := TStringList.Create;
teste.LoadFromFile(´teste.txt´);
teste2 := teste.Text;
AssignFile(f, ´teste2.txt´);
Rewrite(f);
write(f, teste2);
end;
Rândallo Prux
Randallo
Curtidas 0
Respostas
Nildo
21/10/2005
E com String normal? Ocorre o mesmo erro?
GOSTEI 0
Massuda
21/10/2005
Acho que o Write não sabe lidar com WideStrings (você está trabalhando com Unicode?). Não consegui compilar seu exemplo, mesmo declarando F como sendo File ou Text.
GOSTEI 0
Randallo
21/10/2005
Eu vou precisar salvar em uma váriável o conteúdo de uma StringList bem extensa.
Eu estava fazendo o teste acima para verificar o comportamento do método .Text de uma StringList, pois o mesmo retorna uma string e não sei até que tamanho ele suporta.
Realmente acho que o problema do desaparecimento dos caracteres no fim do arquivo salvo é do write, pois ao imprimir na tela o conteúdo da var teste2 ele apresenta corretamente.
A questão é a seguinte: o metodo .Text irá funcionar se a StringList tiver até o tamanho máximo de uma widestring (~2^30 characters / 4 bytes to 2GB)?
Eu estava fazendo o teste acima para verificar o comportamento do método .Text de uma StringList, pois o mesmo retorna uma string e não sei até que tamanho ele suporta.
Realmente acho que o problema do desaparecimento dos caracteres no fim do arquivo salvo é do write, pois ao imprimir na tela o conteúdo da var teste2 ele apresenta corretamente.
A questão é a seguinte: o metodo .Text irá funcionar se a StringList tiver até o tamanho máximo de uma widestring (~2^30 characters / 4 bytes to 2GB)?
GOSTEI 0
Nildo
21/10/2005
Para isso eu não aconselho usar métodos como carregar um arquivo desse tamanho em uma StringList. Primeiro que a memória do seu aplicativo vai subir muito, e pode estourar o SO. Eu usaria métodos mais eficientes como leitura dinâmica (ler somente o que vai aparecer na tela), usar APIs do windows para manuseio do arquivo, etc
GOSTEI 0