Ir ao conteúdo
  • Cadastre-se
na.vicente

File of - Arquivos

Recommended Posts

Queria declarar um registro e depois declarar um arquivo como file of do registro, mas dá erro na compilação, olha como tá:


type
mago=record
nome:string;
a:integer;
v:integer;
d:integer;
end;
arquivo=file of mago;
var
arquivo_entrada:arquivo;
arquivo_saida:arquivo;
temp:mago;
i,j,posmenor,n:integer;

O que tá errado? Como se declara uma estrutura desse tipo?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Queria declarar um registro e depois declarar um arquivo como file of do registro, mas dá erro na compilação, olha como tá:


type
mago=record
nome:string;
a:integer;
v:integer;
d:integer;
end;
arquivo=file of mago;
var
arquivo_entrada:entrada;
arquivo_saida:arquivo;
temp:mago;
i,j,posmenor,n:integer;

O que tá errado? Como se declara uma estrutura desse tipo?

Olá...

Compile, veja qual a mensagem do erro... analise-a e corrija o código.

PS: Se tiver em inglês, qualquer coisa usa o Google Translator.

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro é esse:

questao2.lpr(9,22) Error: Typed files cannot contain reference-counted types.

Mas porque diz que registros não podem ser usados em registros se eu já fiz isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na,

Tente dar um limite para o campo nome no seu registro. Ex:

nome:string[80];

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro não é mais na parte da string não é aqui:


type
mago=record
nome:string;
a:integer;
v:integer;
d:integer;
end;
rank=file of mago;

Dá erro e diz que não pode usar registros como referencia para registros. Isso faz sentido?

Eu uso o Lazarus. Compilei no dev-pascal aqui e essa parte diz que não deu erro mas deu erro aqui


append(arquivo_saida);

No append diz que a variável deveria ser text. O que é isso??

Compartilhar este post


Link para o post
Compartilhar em outros sites

PARTE 1 (fiz antes da resposta de na.vicente - preferi manter)

1) Sobre minha sugestão de analisar o erro informado

Olá...

Compile, veja qual a mensagem do erro... analise-a e corrija o código.

PS: Se tiver em inglês, qualquer coisa usa o Google Translator.

No aguardo.

De modo geral, essa dica é sempre válida... ^_^ mas eu estava me baseando por um "erro" relativamente mais simples que tinha encontrado na sua postagem inicial, já que corrigindo isso resolvia o problema...

var
[B] arquivo_entrada:entrada;[/B]
arquivo_saida:arquivo;

Ou seja, estava utilizando entrada em vez de arquivo.

Obs.: Na sua postagem essa questão já está corrigida. (por você mesmo, correto?)

2) Analise do erro

O erro é esse:

questao2.lpr(9,22) Error: Typed files cannot contain reference-counted types.

Mas porque diz que registros não podem ser usados em registros se eu já fiz isso?

Pesquisando na internet sobre a extensão ".lpr", encontrei referências sobre o Lazarus IDE. Baixei, e testei o seu código... e ocorreu o mesmo erro citado por você...

Fiz alguns testes... e cheguei a seguinte conclusão: O problema está numa configuração ou "limitação" da IDE (do Lazarus), pois testei o mesmo compilador, o Free Pascal Compiler 2.6.2, dele e com o mesmo código no meu NotePad++ e rodou normalmente... :huh:

3) Limitação de campo

Na,

Tente dar um limite para o campo nome no seu registro. Ex:

nome:string[80];

Testei essa sugestão de LNW e funcionou...

Resumindo: Por algum motivo que não consegui descobrir ainda (estou na curiosidade), o Lazarus, apesar de usar o FPC 2.6.2, não aceita essa declaração de file of string... no caso o programador fica "obrigado" a delimitar o tamanho da String, ex.: file of string[X], onde "X" varia de 1 a 255.

Obs.1: Realmente não entendi mesmo, já que na minha cabeça quando não é especificado, a String fica com 255, ou seja, o mesmo que String[255].

Obs.2: No seu contexto, a string está dentro do record, basta inseri o tal [X] da mesma forma... (cai na mesma regra)

***

PARTE 2 (respondendo a nova postagem)

1) Erro anterior

O erro não é mais na parte da string não é aqui:


type
mago=record
nome:string;
a:integer;
v:integer;
d:integer;
end;
rank=file of mago;

Dá erro e diz que não pode usar registros como referencia para registros. Isso faz sentido?

Já comentei na parte 1... ou seja, para usar string como tipo do arquivo no Lazarus, você deve delimitar o tamanho das string... basta seguir a dica de LNW... (com valores entre 1 e 255)

2) Versão da IDE

Eu uso o Lazarus. Compilei no dev-pascal aqui e essa parte diz que não deu erro mas deu erro aqui

append(arquivo_saida);

No append diz que a variável deveria ser text. O que é isso??

Comentei também na primeira parte... o problema deve estar na IDE, e não no compilador que ela usa...

Em relação ao append(), é que esse comando não funciona para variáveis do tipo File, ela é para Text mesmo... Observe que existem algumas diferenças entre File e Text... cada um tem as suas características (Google, mas qualquer coisa estamos aqui^_^).

Você deve usar outro comando... Por exemplo, se você quer posicionar no início do arquivo, você poderia usar o Seek(VARIÁVEL_DO_ARQUIVO,0) (o arquivo já tem que está aberto ;)).

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×