Jump to content


Photo

Ler E Mostrar Um Arquivo .txt Em Php


  • Faça o login para participar
21 replies to this topic

#1 karper1.2

karper1.2

    Normal

  • Usuários
  • 62 posts
  • Sexo:Masculino
  • Localidade:Serro
  • Interesses:PHP e áreas de Web

Posted 21/07/2009, 17:06

Galera,
Tenho um site onde quero mostrar as notas dos alunos nele. O dono do programa que tem aqui na escola onde é lançado as notoas e o boletim escolar, me forneceu um arquivo em Txt com os dados dos alunos dessa forma:


28/05/2009200800001309LUÍS GUSTAVO ARAÚJO ANDRADE                                 EF5A                MANHÃ               Ens. Fund.5ª série/6º Ano     00101LÍNGUA PORTUGUESA             40 *12,00     16,00    *28,00     36,00     32,00    * 9,00     17,00    *26,00     40,00    *33,00     65,0028/05/2009200800001309LUÍS GUSTAVO ARAÚJO ANDRADE                                 EF5A                MANHÃ               Ens. Fund.5ª série/6º Ano     00202MATEMÁTICA                    40  18,00    *12,00     30,00               30,00    *11,00     16,00    *27,00     33,00    *30,00     60,0028/05/2009200800001309LUÍS GUSTAVO ARAÚJO ANDRADE                                 EF5A                MANHÃ               Ens. Fund.5ª série/6º Ano     00303HISTÓRIA                      40  19,00     17,00     36,00               36,00     15,00     17,00     32,00              *32,00     68,0028/05/2009200800001309LUÍS GUSTAVO ARAÚJO ANDRADE                                 EF5A                MANHÃ               Ens. Fund.5ª série/6º Ano     00404GEOGRAFIA                     40  21,00     20,00     41,00               41,00     20,00     19,00     39,00              *39,00     80,0028/05/2009200800001309LUÍS GUSTAVO ARAÚJO ANDRADE                                 EF5A                MANHÃ               Ens. Fund.5ª série/6º Ano     00707ED. FÍSICA                    40  25,00     25,00     50,00               50,00     25,00     25,00     50,00              *50,0028/05/2009200800001309LUÍS GUSTAVO ARAÚJO ANDRADE                                 EF5A                MANHÃ               Ens. Fund.5ª série/6º Ano     02105CIÊNCIAS                      40  19,00     19,00     38,00               38,00    *14,00     21,00     35,00              *35,00     73,0028/05/2009200800001309LUÍS GUSTAVO ARAÚJO ANDRADE                                 EF5A                MANHÃ               Ens. Fund.5ª série/6º Ano     02410INGLÊS                        40  19,00     23,00     42,00               42,00     15,00  1  16,00  1  31,00              *31,00     73,00    128/05/2009200800001309LUÍS GUSTAVO ARAÚJO ANDRADE                                 EF5A                MANHÃ               Ens. Fund.5ª série/6º Ano     02509LITERATURA                    40 * 9,00     15,00    *24,00     30,00    *27,00    *11,00     22,00     33,00              *33,00     60,0028/05/2009200800001309LUÍS GUSTAVO ARAÚJO ANDRADE                                 EF5A                MANHÃ               Ens. Fund.5ª série/6º Ano     05206ARTES                         40  21,00     20,00     41,00               41,00     20,00     23,00  1  43,00              *43,00     84,00    128/05/2009200800001309LUÍS GUSTAVO ARAÚJO ANDRADE                                 EF5A                MANHÃ               Ens. Fund.5ª série/6º Ano     06411CULTURA RELIGIOSA             40  23,00     23,00     46,00               46,00     20,00     21,00     41,00              *41,00     87,00

Junto ele me mandou as seguintes informações DESCREVENDO O ARQUIVO:

DESCRICAO DO ARQUIVO TEXTO.          02 DTEMISSAO              10  POSIÇOES          02 ANO DE EMISSAO         04  POSIÇOES          02 MATRICULA              06  POSIÇOES          02 NUMERO DO DIARIO       02  POSIÇOES          02 NOME DO ALUNO          60  POSIÇOES          02 TURMA DO ALUNO         20  POSIÇOES          02 TURNO DO ALUNO         20  POSIÇOES          02 GRADE DO ALUNO         30  POSIÇOES          02 CODIGO DA DISCIPLINA   03  POSIÇOES          02 SEQUENCIA DISCIPLINA   02  POSIÇOES          02 DESCRICAO DISCIPLINA   30  POSIÇOES          02 BIMESTRE                1  POSIÇAO          02 FORMAAVALIACAO          1  POSIÇOES          02 BRANCO                  1  POSIÇAO          02 ASTERISCO1B             1  POSIÇAO          02 NOTAS E FALTAS1B        5  POSIÇOES          02 ASTERISCO2B             1  POSIÇAO          02 NOTAS E FALTAS2B        5  POSIÇOES          02 SOMA 1 E 2BIMESTRE      5  POSIÇOES          02 ASTERISCORECUPERACAO    1  POSIÇAO          02 NOTAS E FALTAS2RECUP    5  POSIÇOES          02 TOTAL RECUPERACAO2      5  POSIÇOES          02 ASTERISCO3B             1  POSIÇAO          02 NOTAS E FALTAS3B        5  POSIÇOES          02 ASTERISCO4B             1  POSIÇAO          02 NOTAS E FALTAS4B        5  POSIÇOES          02 SOMA 3 E 4BIMESTRE      5  POSIÇOES          02 TOTAL RECUPERACAO4      5  POSIÇOES          02 SOMA 3 E 4BIMESTRE      5  POSIÇOES          02 MEDIAFINAL              5  POSIÇOES          02 TOTAL FALTA             4  POSIÇOES

Para ler os dados e mostra-los na WEB eu montei o layout do boletim e fiz o seguinte:

DECLAREI AS VÁRIAVEIS

<?php// Só um exemplo$fp = fopen("./nota1.txt", "r");$datemissao = fread($fp, 10); // lê data de emissão 10 bytes$anoemissao = fread($fp, 04); // lê ano de emissão 04 bytes$matricula = fread($fp, 06); // lê número de matrícula 06 bytesfclose($fp);?>

Depois recuperei os dados cada um em seu campo através do código:

Matrícula: <? echo $matricula; ?>

Porém eu consigo fazer isso chamando os primeiros dados: EXEMPLO: AS NOTAS DE LINGUA PORTUGUESA.
Como eu posso fazer para chamar o restante dos dados???

Quem quiser ver a prévia do Boletim que tô falando é só acessar: http://www.instituto...m.br/boleto.php

Valeu...

#2 CMAC

CMAC

    Normal

  • Usuários
  • 93 posts
  • Sexo:Masculino

Posted 21/07/2009, 18:29

Use fgets para ler uma linha inteira, depois separa os dados da linha usando substr.

Por exemplo, corra o script seguinte e veja o que acontece:
<?php

$handle = @fopen("./nota1.txt", "r");
if($handle)
{
	while( ! feof($handle))
	{
		$buffer = fgets($handle, 4096);
		
		//Separa os dados aqui
		echo 'DTEMISSAO: ' . substr($buffer, 0, 10) . '<br />';
		echo 'ANO DE EMISSAO: ' . substr($buffer, 10, 4) . '<br />';
		echo 'MATRICULA: ' . substr($buffer, 14, 6) . '<br />';
		echo 'NUMERO DO DIARIO: ' . substr($buffer, 20, 2) . '<br />';
		echo 'NOME DO ALUNO: ' . substr($buffer, 22, 60) . '<br />';
		
		/* Continua ... */
		
		echo 'DESCRICAO DISCIPLINA: ' . substr($buffer, 157, 30) . '<br />';
		
		echo '--------<br />';
		
	}
	fclose($handle);
}

Espero ter ajudado.

#3 karper1.2

karper1.2

    Normal

  • Usuários
  • 62 posts
  • Sexo:Masculino
  • Localidade:Serro
  • Interesses:PHP e áreas de Web

Posted 22/07/2009, 13:14

CMAC, valeu....

Mas aqui, eu preciso manter as declarações das variáveis?

Eu continuei o seu código porém dá o seguinte erro:

Parse error: parse error in c:\apache\htdocs\teste\diario.php on line 6

Ao que parece é um erro de escrita... mas não consegui resolver... na linha indicada fica o seguinte comando..

<?php$handle = @fopen("./nota1.txt", "r");if($handle){    while ( ! feof($handle)) // O ERRO ESTÁ AQUI NA SEXTA LINHA    {        $buffer = fgets($handle, 4096);                //Separa os dados aqui        echo 'DTEMISSAO: ' . substr($buffer, 0, 10) . '<br/>';        echo 'ANO DE EMISSAO: ' . substr($buffer, 10, 4) . '<br/>';        echo 'MATRICULA: ' . substr($buffer, 14, 6) . '<br/>';        echo 'NUMERO DO DIARIO: ' . substr($buffer, 20, 2) . '<br/>';        echo 'NOME DO ALUNO: ' . substr($buffer, 22, 60) . '<br/>';                /* Continua ... */                echo 'DESCRICAO DISCIPLINA: ' . substr($buffer, 157, 30) . '<br/>';                echo '--------<br/>';            }    fclose($handle);}?>

Dicas... rs

#4 CMAC

CMAC

    Normal

  • Usuários
  • 93 posts
  • Sexo:Masculino

Posted 22/07/2009, 14:52

Não tem erro nenhum nesta linha. O que o script faz é imprimir estes dados. Foi só um exemplo de como ler dados de cada disciplina.
Os nomes das disciplinas ali no código são impressas e não declarada.

Se você executar o código, será impresso isso no browser:
DTEMISSAO: 28/05/2009
ANO DE EMISSAO: 2008
MATRICULA: 000013
NUMERO DO DIARIO: 09
NOME DO ALUNO: LUÍS GUSTAVO ARAÚJO ANDRADE
DESCRICAO DISCIPLINA: 00101LÍNGUA PORTUGUESA
--------
DTEMISSAO: 28/05/2009
ANO DE EMISSAO: 2008
MATRICULA: 000013
NUMERO DO DIARIO: 09
NOME DO ALUNO: LUÍS GUSTAVO ARAÚJO ANDRADE
DESCRICAO DISCIPLINA: 00202MATEMÁTICA
--------
DTEMISSAO: 28/05/2009
ANO DE EMISSAO: 2008
MATRICULA: 000013
NUMERO DO DIARIO: 09
NOME DO ALUNO: LUÍS GUSTAVO ARAÚJO ANDRADE
DESCRICAO DISCIPLINA: 00303HISTÓRIA
--------
DTEMISSAO: 28/05/2009
ANO DE EMISSAO: 2008
MATRICULA: 000013
NUMERO DO DIARIO: 09
NOME DO ALUNO: LUÍS GUSTAVO ARAÚJO ANDRADE
DESCRICAO DISCIPLINA: 00404GEOGRAFIA
--------
DTEMISSAO: 28/05/2009
ANO DE EMISSAO: 2008
MATRICULA: 000013
NUMERO DO DIARIO: 09
NOME DO ALUNO: LUÍS GUSTAVO ARAÚJO ANDRADE
DESCRICAO DISCIPLINA: 00707ED. FÍSICA
--------
DTEMISSAO: 28/05/2009
ANO DE EMISSAO: 2008
MATRICULA: 000013
NUMERO DO DIARIO: 09
NOME DO ALUNO: LUÍS GUSTAVO ARAÚJO ANDRADE
DESCRICAO DISCIPLINA: 02105CIÊNCIAS
--------
DTEMISSAO: 28/05/2009
ANO DE EMISSAO: 2008
MATRICULA: 000013
NUMERO DO DIARIO: 09
NOME DO ALUNO: LUÍS GUSTAVO ARAÚJO ANDRADE
DESCRICAO DISCIPLINA: 02410INGLÊS
--------
DTEMISSAO: 28/05/2009
ANO DE EMISSAO: 2008
MATRICULA: 000013
NUMERO DO DIARIO: 09
NOME DO ALUNO: LUÍS GUSTAVO ARAÚJO ANDRADE
DESCRICAO DISCIPLINA: 02509LITERATURA
--------
DTEMISSAO: 28/05/2009
ANO DE EMISSAO: 2008
MATRICULA: 000013
NUMERO DO DIARIO: 09
NOME DO ALUNO: LUÍS GUSTAVO ARAÚJO ANDRADE
DESCRICAO DISCIPLINA: 05206ARTES
--------
DTEMISSAO: 28/05/2009
ANO DE EMISSAO: 2008
MATRICULA: 000013
NUMERO DO DIARIO: 09
NOME DO ALUNO: LUÍS GUSTAVO ARAÚJO ANDRADE
DESCRICAO DISCIPLINA: 06411CULTURA RELIGIOSA
--------

Portanto, o que você precisa para mostrar o nome da disciplina em cada linha é:
substr($buffer, 157, 30)
Em que $buffer é uma linha inteira do arquivo.

#5 karper1.2

karper1.2

    Normal

  • Usuários
  • 62 posts
  • Sexo:Masculino
  • Localidade:Serro
  • Interesses:PHP e áreas de Web

Posted 22/07/2009, 17:24

O raciocínio e a forma da leitur eu entendi... o que eu não estou entendendo é porquê da esse ERRO quanto executo no browser... Será problema no meu pc...

#6 karper1.2

karper1.2

    Normal

  • Usuários
  • 62 posts
  • Sexo:Masculino
  • Localidade:Serro
  • Interesses:PHP e áreas de Web

Posted 05/08/2009, 15:20

E ai.. galera... mais nenhuma dica...
Por favor alguém ai... poderia me dar uma forcinha...
Já tentei fazer da forma que o CMAC passou mas só acusa esse erro de Parse...
Da forma que eu iniciei a leitura até dá certo, porém eu preciso saber como farei para ler a próxima matéria sem ter que ler todos os dados do aluno (nome, matrícula, etc... ) novamente...

Abraços

#7 Tonini

Tonini

    12 Horas

  • Usuários
  • 130 posts
  • Sexo:Masculino

Posted 07/08/2009, 13:32

Cara,

Peguei o código e aqui funcinou certinho!
Não conseguir reproduzir esse erro de parse...
CalvinBall.
Any player may declare a new rule at any point in the game.
The player may do this audibly or silently...

#8 karper1.2

karper1.2

    Normal

  • Usuários
  • 62 posts
  • Sexo:Masculino
  • Localidade:Serro
  • Interesses:PHP e áreas de Web

Posted 18/08/2009, 23:07

Boa noite... parceiros..
Sou eu de novo...
Já tentei tudo que me falaram mas não funciona.
Agora dá o seguinte erro:

Parse error: syntax error, unexpected T_STRING in /home/institut/public_html/diario.php on line 6

Bom... vamos tentando...
Tenho outra dúvida, teria como eu fazer um Select em um txt. Por exemplo eu quero que leia somente os dados do aluno com a matricula 0001309?

Abraços

#9 Camarão

Camarão

    12 Horas

  • Usuários
  • 123 posts
  • Sexo:Masculino
  • Localidade:Divinópolis

Posted 18/08/2009, 23:29

Cara aqui funcionou beleza
deu erro nenhum olha na imagem em anexo....


AGOra pra fazer o select nao sei se da. mas vc pode fazer assim

<?php

$handle = @fopen("alunos.txt", "r");
if($handle)
{
	while ( ! feof($handle)) 
	{
		$buffer = fgets($handle, 4096);

		$matricula = substr($buffer, 14, 6);
		//se a matricula for igual a buscada...mostra os dados
		if($matricula ==$_POST['txtMatricula']){
			
		//Separa os dados aqui
		echo 'DTEMISSAO: ' . substr($buffer, 0, 10) . '<br/>';
		echo 'ANO DE EMISSAO: ' . substr($buffer, 10, 4) . '<br/>';
		echo 'MATRICULA: ' . substr($buffer, 14, 6) . '<br/>';
		echo 'NUMERO DO DIARIO: ' . substr($buffer, 20, 2) . '<br/>';
		echo 'NOME DO ALUNO: ' . substr($buffer, 22, 60) . '<br/>';
		
		/* Continua ... */
		
		echo 'DESCRICAO DISCIPLINA: ' . substr($buffer, 157, 30) . '<br/>';
		
		echo '--------<br/>';
		}
	}// fim do if
	
	fclose($handle);
}

?>

Attached Files


Edição feita por: Camarão, 18/08/2009, 23:30.

<?php echo("Guilherme Marques Eloi"); ?>

#10 karper1.2

karper1.2

    Normal

  • Usuários
  • 62 posts
  • Sexo:Masculino
  • Localidade:Serro
  • Interesses:PHP e áreas de Web

Posted 19/08/2009, 00:10

É muito estranho...
Já atualizei meu sistema todo...
Instalei até o easyphp e o phptriad em outra máquina e testei para ver se era eu que tava fazendo algo errado e só retorna o mesmo erro...
Vou tentar de novo...
Mesmo assim obrigado...

Uma dúvida. No lugar

if($matricula ==$_POST['txtMatricula']){

txtMatricula = Número da matricula que eu procuro?

Outra coisa. Reparou que ele repete todos os dados do aluno e na verdade eu só precisaria que ele lê-se a segunda linha a partir da DISCIPLINA.

Abraços

Edição feita por: karper1.2, 19/08/2009, 00:13.


#11 l3on4rdo

l3on4rdo

    O Mestre dos Mestres

  • Usuários
  • 159 posts
  • Sexo:Não informado
  • Localidade:São Carlos - SP

Posted 19/08/2009, 00:12

axo q nao...
mas depois q vc declaro cada linha do txt em uma var., eh so "buscar" usando o while !

Abraços
Buscando um convite do TorrentLeech ! Se tiver um, me mande uma MP ! Ratio > 1 garantida !

#12 karper1.2

karper1.2

    Normal

  • Usuários
  • 62 posts
  • Sexo:Masculino
  • Localidade:Serro
  • Interesses:PHP e áreas de Web

Posted 19/08/2009, 00:20

Bom ... na verdade eu não declarei cada linha do txt e sim o conteúdo de 1 linha completa. A questão tá em ler somente os dados necessários da próxima linha até encerrar os dados referentes aquele aluno.

#13 Camarão

Camarão

    12 Horas

  • Usuários
  • 123 posts
  • Sexo:Masculino
  • Localidade:Divinópolis

Posted 19/08/2009, 00:56

É muito estranho...
Já atualizei meu sistema todo...
Instalei até o easyphp e o phptriad em outra máquina e testei para ver se era eu que tava fazendo algo errado e só retorna o mesmo erro...
Vou tentar de novo...
Mesmo assim obrigado...

Uma dúvida. No lugar

if($matricula ==$_POST['txtMatricula']){

txtMatricula = Número da matricula que eu procuro?

Outra coisa. Reparou que ele repete todos os dados do aluno e na verdade eu só precisaria que ele lê-se a segunda linha a partir da DISCIPLINA.

Abraços



o txtMatricula é o nome do seu <input> no formulario de busca.
pode fazer assim
$buscamatricula = $_POST['txtMatricula'];
if($matricula ==$buscamatricula){

ele esta repetindo os dados , pois no txt tem apenas um aluno cadastrado varias vezes..
a busca como eu te passei ae funciona sim, testei aki, coloki numeros de matricula diferente para os registros e busque por um especifico q vc vai ver, pega somente o buscado.

qual sua duvida?
<?php echo("Guilherme Marques Eloi"); ?>

#14 CMAC

CMAC

    Normal

  • Usuários
  • 93 posts
  • Sexo:Masculino

Posted 19/08/2009, 07:31

O script que postei foi apenas um exemplo de como resolver o problema.

Agora você tem que adaptar-o para o seu caso. Por exemplo, se você quer criar uma tabela para mostrar as notas dos 4 bimestres das disciplinas, bastaria alterar o script para:

<?php

$handle = @fopen("./nota1.txt", "r");
if($handle)
{

	echo '<table cellspacing="1" cellpadding="4" border="1">';
	echo '<tr><td>Disciplinas</td><td>1º Bim</td><td>2º Bim</td><td>3º Bim</td><td>4º Bim</td></tr>';
	while( ! feof($handle))
	{
		$buffer = fgets($handle, 4096);
		
		echo '<tr>';
		
		echo '<td>' . substr($buffer, 157, 30) . '</td>';
		echo '<td>' . substr($buffer, 191, 2) . '</td>';
		echo '<td>' . substr($buffer, 201, 2) . '</td>';
		echo '<td>' . substr($buffer, 241, 2) . '</td>';
		echo '<td>' . substr($buffer, 251, 2) . '</td>';
		
		echo '</tr>';
	}
	echo '</table>';
	fclose($handle);
}

O resultado será algo parecido com a screenshot abaixo.

Agora, para construir seu boletim, basta seguir o exemplo e completar o código.

Espero ter ajudado.

Attached Files



#15 karper1.2

karper1.2

    Normal

  • Usuários
  • 62 posts
  • Sexo:Masculino
  • Localidade:Serro
  • Interesses:PHP e áreas de Web

Posted 19/08/2009, 23:17

Valeu as dicas...
Tive que fzer uma viagem hoje mas estou acompanhando aki... assim que chegar em casa testo e posto aki para vocês..
Abraços e obrigado pela ajuda




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq