Erro lendo arquivo txt

1. Erro lendo arquivo txt

José Antônio Nunes de Morais
janunesdemor

(usa Slackware)

Enviado em 22/01/2011 - 17:51h

Prezados,

Instalei o Lazarus 0.9.29 e estou tendo alguns problemas, exemplo, eu preciso ler uma arquivo txt... e ele possui umas 4500 linhas.


Eu faço uma pesquisa nele.. acontece que não traz as linha que desejo para o memo1.

Pesquisando vi um tal de unicode... o texto tem que ser nele algum sabe como utilizar o tmeme1

Também gostar de ter o componente richtext.. nele se possível.

aguardo resposta.


  


2. Re: Erro lendo arquivo txt

Brian Chalega da Silva
brian_ch

(usa Arch Linux)

Enviado em 23/01/2011 - 13:34h

Tem certeza de que não é um erro de lógica? Eu fiz um teste aqui, usando como referência o que é falado nestes dois links:
http://www.codigofonte.net/dicas/delphi/129_lendo-e-gravando-arquivos-de-texto-em-delphi
http://xucro.wordpress.com/tag/substring/ --- Parte sobre procurar Substring em uma String em Delphi

Visual:
Coloquei um tmemo (renomeado para menTexto), uma label com o caption “Digite o que pesquisar:”, um Tedit (edtSubs) e um Tbutton (btnCarregar).

Veja o código do onclick do botão:

procedure TfrmPesquisa.btnCarregarClick(Sender: TObject);
var arq: TextFile;
linha: String;
begin
menTexto.Clear;
AssignFile(arq, '/home/brianf/Documents/bill_gates-e-GM');
Reset(arq);
while not EOF(arq) do begin
readln(arq, linha);
if Pos(edtSubs.Text,linha)>0 then begin
menTexto.Append(linha);
end;
end;
end;

Tente se basear nesse exemplo para o seu código, se quiser pode postá-lo aqui para vermos o que tem de errado.

Unicode:
É um padrão de sistema de codificação de arquivo, ele permite que uma gama muito maior de caracteres sejam representados do que em ASCII por exemplo, detalhes sobre isso você pode obter com uma pesquisa no google ou uma busca na wikipédia. Os editores do linux em geral já salvam seus arquivos em UTF-8 que é uma implementação do unicode, mas que também é compatível com ASCII.

Rich Text:
Há um componente para rich text, só que ele tem de ser instalado a parte:
http://wiki.lazarus.freepascal.org/RichMemo

Mas você devia ter feito uma pesquisa melhor antes de perguntar tanto de unicode quanto sobre o rich text pois isso é coisa que se acha nos primeiros links em uma busca no google.

Você pode pesquisar como usar o Tmemo(e a maioria dos outros componentes também) em fóruns e sites de Delphi, em geral é a mesma coisa.

Espero ter ajudado, e dê retorno.


3. Erro lendo arquivo txt, A questão é?

José Antônio Nunes de Morais
janunesdemor

(usa Slackware)

Enviado em 23/01/2011 - 23:43h

Que quando eu locazar este texto ou palavra quero que ele. Vá lendo linha por linha e colocando no Memo1.. e é isto o que não acontece, no Lazarus 0.9.29.

Exemplo:

Tenho um texto da Biblia, que tem algumas marcações.

Veja:
>I REIS [12]
1 E foi Robo�o para Siqu�m; porque todo o Israel se reuniu em Siqu�m, para o fazerem rei.
2 Sucedeu que, Jerobo�o, filho de Nebate, achando-se ainda no Egito, para onde fugira de diante do rei Salom�o, voltou do Egito,
3 Porque mandaram cham�-lo; veio, pois, Jerobo�o e toda a congrega��o de Israel, e falaram a Robo�o, dizendo:
4 Teu pai agravou o nosso jugo; agora, pois, alivia tu a dura servid�o de teu pai, e o pesado jugo que nos imp�s, e n�s te serviremos.
5 E ele lhes disse: Ide-vos at� ao terceiro dia, e ent�o voltai a mim. E o povo se foi.
6 E teve o rei Robo�o conselho com os anci�os que estiveram na presen�a de Salom�o, seu pai, quando este ainda vivia, dizendo: Como aconselhais v�s que se responda a este povo?
7 E eles lhe falaram, dizendo: Se hoje fores servo deste povo, e o servires, e respondendo-lhe, lhe falares boas palavras, todos os dias ser�o teus servos.
8 Por�m ele deixou o conselho que os anci�os lhe tinham dado, e teve conselho com os jovens que haviam crescido com ele, que estavam diante dele.
9 E disse-lhes: Que aconselhais v�s que respondamos a este povo, que me falou, dizendo: Alivia o jugo que teu pai nos imp�s?
10 E os jovens que haviam crescido com ele lhe falaram: Assim dir�s a este povo que te falou: Teu pai fez pesad�ssimo o nosso jugo, mas tu o alivia de sobre n�s; assim lhe falar�s: Meu dedo m�nimo � mais grosso do que os lombos de meu pai.
11 Assim que, se meu pai vos carregou de um jugo pesado, ainda eu aumentarei o vosso jugo; meu pai vos castigou com a�oites, por�m eu vos castigarei com escorpi�es.
12 Veio, pois, Jerobo�o e todo o povo, ao terceiro dia, a Robo�o, como o rei havia ordenado, dizendo: Voltai a mim ao terceiro dia.
13 E o rei respondeu ao povo duramente; porque deixara o conselho que os anci�os lhe haviam dado.
14 E lhe falou conforme ao conselho dos jovens, dizendo: Meu pai agravou o vosso jugo, por�m eu ainda aumentarei o vosso jugo; meu pai vos castigou com a�oites, por�m eu vos castigarei com escorpi�es.
15 O rei, pois, n�o deu ouvidos ao povo; porque esta revolta vinha do SENHOR, para confirmar a palavra que o SENHOR tinha falado pelo minist�rio de A�as, o silonita, a Jerobo�o, filho de Nebate.
16 Vendo, pois, todo o Israel que o rei n�o lhe dava ouvidos, tornou-lhe o povo a responder, dizendo: Que parte temos n�s com Davi? N�o h� para n�s heran�a no filho de Jess�. �s tuas tendas, � Israel! Prov� agora a tua casa, � Davi. Ent�o Israel se foi �s suas tendas.
17 No tocante, por�m, aos filhos de Israel que habitavam nas cidades de Jud�, tamb�m sobre eles reinou Robo�o.
18 Ent�o o rei Robo�o enviou a Ador�o, que estava sobre os tributos; e todo o Israel o apedrejou, e ele morreu; mas o rei Robo�o se animou a subir ao carro para fugir para Jerusal�m.
19 Assim se rebelaram os israelitas contra a casa de Davi, at� ao dia de hoje.
20 E sucedeu que, ouvindo todo o Israel que Jerobo�o tinha voltado, enviaram, e o chamaram para a congrega��o, e o fizeram rei sobre todo o Israel; e ningu�m seguiu a casa de Davi sen�o somente a tribo de Jud�.
21 Vindo, pois, Robo�o a Jerusal�m, reuniu toda a casa de Jud� e a tribo de Benjamim, cento e oitenta mil escolhidos, destros para a guerra, para pelejar contra a casa de Israel, para restituir o reino a Robo�o, filho de Salom�o.
22 Por�m veio a palavra de Deus a Sema�as, homem de Deus, dizendo:
23 Fala a Robo�o, filho de Salom�o, rei de Jud�, e a toda a casa de Jud�, e a Benjamim, e ao restante do povo, dizendo:
24 Assim diz o SENHOR: N�o subireis nem pelejareis contra vossos irm�os, os filhos de Israel; volte cada um para a sua casa, porque eu � que fiz esta obra. E ouviram a palavra do SENHOR, e voltaram segundo a palavra do SENHOR.
25 E Jerobo�o edificou a Siqu�m, no monte de Efraim, e habitou ali; e saiu dali, e edificou a Penuel.
26 E disse Jerobo�o no seu cora��o: Agora tornar� o reino � casa de Davi.
27 Se este povo subir para fazer sacrif�cios na casa do SENHOR, em Jerusal�m, o cora��o deste povo se tornar� a seu senhor, a Robo�o, rei de Jud�; e me matar�o, e tornar�o a Robo�o, rei de Jud�.
28 Assim o rei tomou conselho, e fez dois bezerros de ouro; e lhes disse: Muito trabalho vos ser� o subir a Jerusal�m; v�s aqui teus deuses, � Israel, que te fizeram subir da terra do Egito.
29 E p�s um em Betel, e colocou o outro em D�.
30 E este feito se tornou em pecado; pois que o povo ia at� D� para adorar o bezerro.
31 Tamb�m fez casa nos altos; e constituiu sacerdotes dos mais baixos do povo, que n�o eram dos filhos de Levi.
32 E fez Jerobo�o uma festa no oitavo m�s, no dia d�cimo quinto do m�s, como a festa que se fazia em Jud�, e sacrificou no altar; semelhantemente fez em Betel, sacrificando aos bezerros que fizera; tamb�m em Betel estabeleceu sacerdotes dos altos que fizera.
33 E sacrificou no altar que fizera em Betel, no dia d�cimo quinto do oitavo m�s, que ele tinha imaginado no seu cora��o; assim fez a festa aos filhos de Israel, e sacrificou no altar, queimando incenso.
>I REIS [13]
1 E eis que, por ordem do SENHOR, veio, de Jud� a Betel, um homem de Deus; e Jerobo�o estava junto ao altar, para queimar incenso.
2 E ele clamou contra o altar por ordem do SENHOR, e disse: Altar, altar! Assim diz o SENHOR: Eis que um filho nascer� � casa de Davi, cujo nome ser� Josias, o qual sacrificar� sobre ti os sacerdotes dos altos que sobre ti queimam incenso, e ossos de homens se queimar�o sobre ti.
3 E deu, naquele mesmo dia, um sinal, dizendo: Este � o sinal de que o SENHOR falou: Eis que o altar se fender�, e a cinza, que nele est�, se derramar�.
4 Sucedeu, pois, que, ouvindo o rei a palavra do homem de Deus, que clamara contra o altar de Betel, Jerobo�o estendeu a sua m�o de sobre o altar, dizendo: Pegai-o! Mas a sua m�o, que estendera contra ele, se secou, e n�o podia tornar a traz�-la a si.
5 E o altar se fendeu, e a cinza se derramou do altar, segundo o sinal que o homem de Deus apontara por ordem do SENHOR.
6 Ent�o respondeu o rei, e disse ao homem de Deus: Suplica ao SENHOR teu Deus, e roga por mim, para que se me restitua a minha m�o. Ent�o o homem de Deus suplicou ao SENHOR, e a m�o do rei se lhe restituiu, e ficou como dantes.
7 E o rei disse ao homem de Deus: Vem comigo para casa, e conforta-te; e dar-te-ei um presente.
8 Por�m o homem de Deus disse ao rei: Ainda que me desses metade da tua casa, n�o iria contigo, nem comeria p�o nem beberia �gua neste lugar.
9 Porque assim me ordenou o SENHOR pela sua palavra, dizendo: N�o comer�s p�o nem beber�s �gua; e n�o voltar�s pelo caminho por onde vieste.
10 Assim foi por outro caminho; e n�o voltou pelo caminho, por onde viera a Betel.
11 E morava em Betel um velho profeta; e vieram seus filhos, e contaram-lhe tudo o que o homem de Deus fizera aquele dia em Betel, e as palavras que dissera ao rei; e as contaram a seu pai.
12 E disse-lhes seu pai: Por que caminho se foi? E seus filhos lhe mostraram o caminho por onde fora o homem de Deus que viera de Jud�.
13 Ent�o disse a seus filhos: Albardai-me um jumento. E albardaram-lhe o jumento no qual ele montou.
14 E foi ap�s o homem de Deus, e achou-o assentado debaixo de um carvalho, e disse-lhe: �s tu o homem de Deus que vieste de Jud�? E ele disse: Sou.
15 Ent�o lhe disse: Vem comigo � casa, e come p�o.
16 Por�m ele disse: N�o posso voltar contigo, nem entrarei contigo; nem tampouco comerei p�o, nem beberei contigo �gua neste lugar.
17 Porque me foi mandado pela palavra do SENHOR: Ali n�o comer�s p�o, nem beber�s �gua; nem voltar�s pelo caminho por onde vieste.
18 E ele lhe disse: Tamb�m eu sou profeta como tu, e um anjo me falou por ordem do SENHOR, dizendo: Faze-o voltar contigo � tua casa, para que coma p�o e beba �gua (por�m mentiu-lhe).
19 Assim voltou com ele, e comeu p�o em sua casa e bebeu �gua.
20 E sucedeu que, estando eles � mesa, a palavra do SENHOR veio ao profeta que o tinha feito voltar.
21 E clamou ao homem de Deus, que viera de Jud�, dizendo: Assim diz o SENHOR: Porquanto foste rebelde � ordem do SENHOR, e n�o guardaste o mandamento que o SENHOR teu Deus te mandara,
22 Antes voltaste, e comeste p�o e bebeste �gua no lugar de que o SENHOR te dissera: N�o comer�s p�o nem beber�s �gua; o teu cad�ver n�o entrar� no sepulcro de teus pais.
23 E sucedeu que, depois que comeu p�o, e depois que bebeu, albardou ele o jumento para o profeta que fizera voltar.
24 Este, pois, se foi, e um le�o o encontrou no caminho, e o matou; e o seu cad�ver ficou estendido no caminho, e o jumento estava parado junto a ele, e tamb�m o le�o estava junto ao cad�ver.
25 E eis que alguns homens passaram, e viram o corpo lan�ado no caminho, como tamb�m o le�o, que estava junto ao corpo; e foram, e o disseram na cidade onde o velho profeta habitava.
26 E, ouvindo-o o profeta que o fizera voltar do caminho, disse: � o homem de Deus, que foi rebelde � ordem do SENHOR; por isso o SENHOR o entregou ao le�o, que o despeda�ou e matou, segundo a palavra que o SENHOR lhe dissera.
27 Ent�o disse a seus filhos: Albardai-me o jumento. Eles o albardaram.
28 Ent�o foi, e achou o cad�ver estendido no caminho, e o jumento e o le�o, que estavam parados junto ao cad�ver; e o le�o n�o tinha devorado o corpo, nem tinha despeda�ado o jumento.
29 Ent�o o profeta levantou o cad�ver do homem de Deus, e p�-lo em cima do jumento levando-o consigo; assim veio o velho profeta � cidade, para o chorar e enterrar.
30 E colocou o cad�ver no seu pr�prio sepulcro; e prantearam-no, dizendo: Ah, irm�o meu!
31 E sucedeu que, depois de o haver sepultado, disse a seus filhos: Morrendo eu, sepultai-me no sepulcro em que o homem de Deus est� sepultado; ponde os meus ossos junto aos ossos dele.
32 Porque certamente se cumprir� o que pela palavra do SENHOR exclamou contra o altar que est� em Betel, como tamb�m contra todas as casas dos altos que est�o nas cidades de Samaria.
33 Nem depois destas coisas deixou Jerobo�o o seu mau caminho; antes, de todo o povo, tornou a constituir sacerdotes dos lugares altos; e a qualquer que queria consagrava sacerdote dos lugares altos.
34 E isso foi causa de pecado � casa de Jerobo�o, para destru�-la e extingui-la da terra.
>I REIS [14]
...
...

Veja eu tenho >I REIS [13], que eu quero e só até a linha acima de >I REIS [14].

É, isto que é não consigo entendeu, é este problema que quero resolver. Sabe como resolver isto?







4. Re: Erro lendo arquivo txt

Brian Chalega da Silva
brian_ch

(usa Arch Linux)

Enviado em 24/01/2011 - 00:59h

Usando aquele mesmo exemplo que eu passei no meu 1° post, eu fiz as seguintes adaptações:
Visual:
Coloquei uma Edit (edtAte) para saber até onde selecionar o texto.

Código:
Dentro do if, depois do append no memo, eu inclui o laço:

while (Pos(edtAte.Text,linha)<=0) and (not EOF(arq)) do begin
readln(arq, linha);
menTexto.Append(linha);
end;

Veja o código todo:

procedure TfrmPesquisa.btnCarregarClick(Sender: TObject);
var arq: TextFile;
linha: String;
begin
menTexto.Clear;
AssignFile(arq, '/home/brianf/Documents/bill_gates-e-GM');
Reset(arq);
while not EOF(arq) do begin
readln(arq, linha);
if Pos(edtSubs.Text,linha)>0 then begin
menTexto.Append(linha);
while (Pos(edtAte.Text,linha)<=0) and (not EOF(arq)) do begin
readln(arq, linha);
menTexto.Append(linha);
end;
end;
end;
end;

Aí é so digitar na primeira caixa de texto a primeira linha que se quer, e na segunda caixa, até onde é para incluir no memo, depois clicar em carregar.

Era mais ou menos isso que você queria fazer?


5. Re: Erro lendo arquivo txt

Brian Chalega da Silva
brian_ch

(usa Arch Linux)

Enviado em 27/01/2011 - 21:22h

E então José, conseguiu fazer o programa? E se conseguiu, como foi? Caso ainda esteja em dúvida pergunte.


6. Resposta

José Antônio Nunes de Morais
janunesdemor

(usa Slackware)

Enviado em 28/01/2011 - 10:47h

Consegui,

Mas, não com o Memo1 e sim com o Listbox.

Pois, o que eu quero é seguinte:

no meu arquivo tem marcações assim:

>REIS II [1]
varias linhas...

depois vem

>REIS [2]
Varias linhas

>REIS [3]
Idem...

Como é a biblia, vai até apocalipse [22].

Bom eu leio arquivo pegando todos ">"+variavel_livro+variavel_capitulo;

E coloco tudo os capitulo no ComboBox... ficando assim:

Ex.: Se o livro clicado for RUTE em ComboBox1.items.add(capitulo).

Vamos ao exempo pratico.

Vamos criar os itens necessário.

Um ListBox1, vamos chamar ele de livros;

Um Edit1, vamos chamar ele de livro_escolhido;

Um ListBox2, vamos chamar ele de Texto;

Um ComboBox1, vamos chamar ele de cb_capitulo.

ao iniciar o programa, faça isto:

var
arq:textfile;
campo,livro,letra,capitulo,compare_livro:string;
tam,i:integer;

begin
//Selecionar e abrir o arquivo para leitura.
assignfile(arq,'biblia.txt');
reset(arq);

//Inicializar as variaveis inteiras.
tam:=0;
i:=0;



// Ler o arquivo de texto linha por linha.
While not EOF(arq) do
begin
readln(arq,campo); //Lê a linha inteira o coloca o conteudo no campo.

//Vamos contar o tamanho da linha.
tam:=length(campo);

//Vamos ler cada caracter da linha.
For i:=0 to tam do
begin
letra:=copy(campo,i,1);
if (letra='[') then
begin
livro:=copy(campo,2,i-1);
end;
if ((livro<>compare_livro) and (letra='[')) then
begin
livros.items.add(=copy(campo,2,i-1));
end;
compare_livro:=livro;

end;
end;

Ao clicar no livro.

var
livro,items:string;

begin
for i:=0 to livros.Items.Count-1 do
if livros.Selected[i] then
livro_escolhido.Text:=(livros.Items[i]);
end;

Ao mudar o texto do livro escolhido.

var
arq2:textfile;
campo,livro,letra,capitulo,compare_livro,livro_ent:string;
tam,i,conte:integer;

begin
//Selecionar e abrir o arquivo para leitura.
assignfile(arq2,'biblia.txt');
reset(arq2);

//Inicializar as variaveis inteiras.
tam:=0;
i:=0;
x:=0;
conte:=0;
cb_capitulo.clear;
// Ler o arquivo de texto linha por linha.
While not EOF(arq2) do
begin
readln(arq,campo); //Lê a linha inteira o coloca o conteudo no
tam:=length(campo);
For i:=0 to tam do
begin
letra:=copy(campo,i,1);
livro_ent:='>'+livro_escolhido.text+'['+cb_capitulo.text+']';

if ((campo=livro_ent) and (letra='[')) then
begin
cb_capitulo.lines.add(copy(campo,i+1,tam-(i+1)));
end;
end; //For.
end; //while.
End;

ao clicar no cb_capitulo

var
arq2:textfile;
campo,livro,letra,capitulo,compare_livro,livro_ent:string;
tam,i,conte:integer;

begin
//Selecionar e abrir o arquivo para leitura.
assignfile(arq2,'biblia.txt');
reset(arq2);

//Inicializar as variaveis inteiras.
tam:=0;
i:=0;
x:=0;
conte:=0;
cb_capitulo.clear;
// Ler o arquivo de texto linha por linha.
While not EOF(arq2) do
begin
readln(arq,campo); //Lê a linha inteira o coloca o conteudo no
tam:=length(campo);
For i:=0 to tam do
begin
letra:=copy(campo,i,1);
livro_ent:='>'+livro_escolhido.text+'['+cb_capitulo.text+']';

if ((campo=livro_ent) and (letra='[')) then
begin
readln(arq3,campo);
While not EOF(arq2) do
begin
Texto.items.add(campo);
readln(arq3,campo);
if (copy(campo,1,1)='>') then
begin
closefile(arq2);
exit;
end;
end;

end;
end; //For.
end; //while.
End;

E mais ou menos isto.

Se for utilizado o memo1 só algumas linhas aparece tente, pegue um texto


7. Re: Erro lendo arquivo txt

Elson Junio G. Silva
ElsonJ

(usa Debian)

Enviado em 31/01/2011 - 14:12h

eu criei a pouco tempo um componente para edição de RichText, está no SVN do do Grupo Lazarus-br você pode baixar os arquivos lá com o comando:
svn checkout http://lazarus-br.googlecode.com/svn/trunk/ lazarus-br-read-only

Só não sei se para você vai funcionar bem pois ele é um pouco lento no Linux, por fazer uso do rtfpars do FPC...


https://groups.google.com/group/lazarus-br?hl=pt-br






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts