Ir ao conteúdo
  • Cadastre-se
Victor.main

Lendo jogadas em um arquivo texto

Recommended Posts

Olá pessoal, estou com um probleminha aqui...

Seguinte, meu professor passou um trabalho pra eu fazer: um jogo pedra-papel-tesoura-lagarto-spock (uma variante do famoso Jan Ken Po). Porém, esse jogo será dividido em duas partes: a online e a offline, a primeira já fiz já que basta os usuarios entrarem com as jogadas e eu analisar... O problema está no modo offline: ele quer que o usuário chame um arquivo texto no terminal onde estão todas as jogadas no seguinte formato:

 

papel/tesoura

lagarto/pedra

tesoura/spock

...{daí em diante...}

 

como ler o arquivo eu sei, uso um WHILE NOT EOF e tal, mas agora, como fazer o compilador analisar o texto somente até antes da barra e armazenar a jogada em uma variável? Depois continuar analisando o texto até  fim da linha?

É posível usar um FOR com um LENGHT? Estava pensando em fazer algo do tipo:

if (ParamCount = 1) then  Begin    Assign(Entrada,ParamStr(1));    Reset(Entrada);    while not eof(Entrada) do    Begin      readln(Entrada,j1);      for x := 1 to Lenght(j1) do      Begin        if j1[x] = '/' then        Begin          for y := 1 to Lenght(x-1) do          {condiçoes das jogadas}        End;      End;    End;  End;

Desde já agradeço futuras respostas :);)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Victor.main

 

 

Ou se o professor não permitir usar funções prontas sugeridas pelo @Simon Viegas, você teria algumas formas de fazer isso manualmente. Você poderia implementar dois laços while: um para concatenar a primeira parte da string (antes do '/') e o outro  para concatenar a segunda parte. A condição para primeiro laço é que o índice (x) esteja dentro do limite do tamanho da string e que o caractere lido seja diferente de '/'. Enquanto isso for verdadeiro, você concatena a string A: (A := A + j1[x]). No segundo laço, você apenas testa pelo final da string e concatena a string B.

 

Dá pra fazer com apenas um laço também, você só precisaria definir quando estaria lendo a primeira parte ou a segunda. Enfim, tem várias maneiras...

 

 

Se não houver problemas em usar funções padrões, é só fazer o que o Viegas sugeriu...

 

 

 

Abs.

 

LNW

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele permitiu uso de funções sim ainda bem... Muito obRigado pela ajuda eu achei que estava fazendo tudo errado hehe

valeu ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Ele permitiu uso de funções sim ainda bem... Muito obRigado pela ajuda eu achei que estava fazendo tudo errado hehe
valeu ;)

Tem como postar o seu novo código para servir de base para outros, possíveis, usuários ?
Caso deseje, poderiamos analisá-los também.

Por favor, nos informe se poderá postar o código ou não, para podermos fechar o chamado.

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado Hoje, 15h41min
Claro que sim, talvez so poderei a noite ja que ainda estou na faculdade..

UPDATE
Olá de novo! Surgiram mais dúvidas hehe... Nunca usei nada com arquivo texto e meu professor não explicou nada disso (queria que a gente pesquisasse e aprendesse cada um por si). Então estou meio perdido até mesmo quanto à declaração das variáveis. Bom, aí está parte do meu código:

Program read_arq;var  arq : text; j, j1, j2 : String;  x, y: integer;  v : array[1..2,1..2] of integer;function Copy(S: string; Ind: integer; Cont: integer);  Begin  if (ParamCount = 1) then    Begin    Assign(Entrada,ParamStr(1));    Reset(Entrada);    while not eof(Entrada) do      Begin      readln(Entrada,j);      for x := 1 to Lenght(j) do        Begin        if j[x] = '/' then          Begin          for y := 1 to Lenght(x-1) do            jog1 := Copy(j, y);          for y := Lenght(x+1) to Lenght(j) do            jog2 := Copy(j, y);          End;        End; {Comandos para testar as entradas}      End;    End;  End;

Não consegui "formatar" o outro texto (internet aqui está horrível)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.
 

 

Então, o Pos() e o Copy(), assim como o Lenght() são comando predefinidos, ou seja, já existem no Pascal!!! Basta usá-los!!

 

 

Pesquise sobre esses termos (em nível de Pascal) que creio você vai entender porque citei eles!!! :)

 

PS: tente entender como cada um desses 3 comandos funcionam... basicamente você pode usar o Pos() e Lenght() como auxiliares para usar o Copy().

 

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

×