
Captulo 26 - arquivos do tipo texto

  Uma outra forma de se trabalhar com um arquivo,  definindo-o como sendo
do tipo TEXTO. Esta forma de definio permite-nos ter registros de tamanhos
diferentes, e cada registro  identificado pela sequncia CRLF, carreage
return, e line feed, correspondentes aos caracteres ASCII$OD e $OA. O iden-
tificador TEXT define uma varivel como sendo arquivo do tipo texto. 
Exemplo:
PROGRAM teste_text;
USES CRT;
VAR
  arq : TEXT;
  ch : CHAR;
BEGIN
  WRITELN (escolha onde deseja qu,imprenssa a fras);
  WRITELN (impressora, disco, ou vdeo, (i,D,V,));
  REPEAT
    ch := UPCASE (READKEY);
  UNTIL ch IN [,D,V];
  IF ch = 
    THEN
      ASSIGN (arq,PRN);
  ELSE
    IF ch = D
      THEN
        ASSIGN (arq,TESTE.DAT);
    ELSE
      ASSIGN (arq,CON);
  {$I-}
  REWRITE (arq);
  {$I+}
  IF IORESULT <> 0 
    THEN 
      WRITELN (arquivo no abert);
  ELSE
    BEGIN
      WRITELN (arq, teste de TEXT);
  CLOSE (arq);
  END;
  WRITE (tecle algo para continuar);
  REPEAT UNTIL READKEY <> #0;
END.  

APPEND - procedimento que permite a abertura de um arquivo do tipo text,
permitindo-se que se faa incluso ao seu final. Se por acaso existir um 
caractere Z (ASCII26) no arquivo, ser assumido este ponto como fim do 
mesmo. O arquivo dever ser previamente associado a um nome externo, e aps
o uso deste procedimento somente ser permitida a incluso de dados ao seu
final. Sua sintaxe:
APPEND (VAR <ARQ> : text);
  Este procedimento no permite que se faa a abertura de um arquivo que 
ainda no existe. O seu uso correto se faz apenas quando o arquivo j e-
xistir. Se em seu disco de trabalho existe um arquivo chamado AUTOEXEC,BAT,
faa o seguinte teste: 
PROGRAM teste_append;
VAR
  arq : TEXT;   {define arq do tipo arquivo texto}
BEGIN
  ASSIGN (arq, \AUTOEXEC.BAT); {associa o nome externo a arq}
  APPEND (arq);
  WRITELN (arq, ECHO INCLUDO PELO TURB);
  CLOSE (arq);
END.

EOF(TEXT) - esta funo retorna verdadeiro se for encontrado o fim de um 
arquivo do tipo texto. A diferena entre EOF para texto e EOF para arquivos
tipados  que na primeira, a referncia do arquivo  opcional. Sua sintaxe:
EOF[(VAR <arq> : TEXT)] : BOOLEAN;
Vejamos um exemplo:
PROGRAM teste_eof_text;
USES CRT;
VAR
  arq : TEXT;
  ch : CHAR;
  nomearq : STRING[67];
BEGIN
  WRITELN (digite o nome do arquiv);
  READLN (nomearq);
  ASSIGN (arq, nomearq);
  {$I-}
  RESET (arq);
  {$I+}
  IF IORESULT <> 0
    THEN
      WRITELN (arquivo no abert);
  ELSE
    BEGIN
      WHILE NOT EOF(arq) DO  
        BEGIN
          READ (arq,ch);
          WRITE (ch);
        END;
      CLOSE (arq);
  END;
  WRITE (tecle algo para continuar);
  REPEAT
  UNTIL READKEY <> #0:
END.

SEEKEOF - esta funo retorna verdadeiro se encontrado status de final de
arquivo.  bastante parecida com a funo EOF, exceto que esta salta to-
dos os brancos e os tabs quando da leitura. Somente para arquivos do tipo
texto. Sua sintaxe:
SEEKEOF [(VAR <arq> : TEXT)] : BOOLEAN;
PROGRAM teste_seekeof;
USES CRT;
VAR
  arq : TEXT;
  ch : CHAR;
  nomearq : STRING[67];
BEGIN
  WRITELN (digite o nome do arquiv);
  READLN (nomearq);
  ASSIGN (arq, nomearq);
  {$I-}
  RESET (arq);
  {$I+]
  IF IORESULT <> 0 
    THEN
      WRITELN (arquivo no abert);
  ELSE
    BEGIN
      WHILE NOT SEEKEOF (arq) DO
        BEGIN
          READ (arq, ch);
          WRITE (ch);
        END;
    WRITE (tecle algo para continuar);
    REPEAT
    UNTIL READKEY <> #0;
END.

SEEKEOLN - esta funo retorna verdadeiro se encontrada a marca de fim de 
linha, salta todos os caracteres em branco e tabulaes encontradas durante
a leitura. Sua sintaxe:
SEEKEOLN [(VAR <arq> : TEXT)] : BOOLEAN;
PROGRAM teste_seekeoln;
USES CRT;
VAR 
  arq : TEXT;
  ch : CHAR;
  nomearq : STRING[67];
BEGIN
  WRITELN (digite o nome do arquiv);
  READLN (nomearq);
  ASSIGN (arq, nomearq);
  {$I-}
  RESET (arq);
  {$I+}
  IF IORESULT <> 0
    THEN
      WRITELN (arquivo no abert);
  ELSE
    BEGIN
      WHILE NOT SEEKEOF (arq) DO
        BEGIN
          READ (arq, ch);
          WRITE (ch);
          IF SEEKEOLN (arq)
           THEN
              WRITELN;
        END;
  CLOSE (arq);
  END;
  WRITE (tecle algo para continuar);
  REPEAT
  UNTIL READKEY <> #0;
END.

FLUSH - este procedimento permite que seja descarregada a rea de Buffer
de um arquivo do tipo texto. Em sua utilizao, pode ser usada a funo
IORESULT, que retornar 0 caso a operao for bem sucedida. Sua sintaxe:
FLUSH (VAR <arq> : TEXT);
Vamos a um exemplo:
PROGRAM teste_flush;
VAR
  arq : TEXT;
BEGIN  
  ASSING (arq,\AUTOEXEC.BAT);
  APPEND (arq);
  WRITELN (arq, ECHO INCLUDO PELO TURB);
  FLUSH (arq);
END.  
  No exemplo anterior, caso no tivssemos nos utilizando da rotina FLUSH,
a gravao no teria sido efetivada, pois a informao estaria apenas buf-
ferizada. 

SETTEXTBUF - este procedimento permite-nos associar um arquivo com tipo tex-
to a uma rea de buffer na rea de dados do programa. Utilize sempre que 
possvel mltiplos de 128 para o tamanho do Buffer. Normalmente, esta rea
j est disposta pelo sistema operacional e corresponde a 128 bytes. Este
comando deve ser usado antes que o arquivo seja aberto, podendo ser usado
tanto para leitura como para gravao. Este procedimento acelera os proce-
dimentos de leitura e de gravao. Sua sintaxe:
SETTEXTBUF (VAR <arq> : TEXT; VAR <buffer>[;<tamanho> : WORD]);
Vejamos agora um exemplo:
PROGRAM teste_seetextbuf;
VAR
  nomearq : STRING[79];
  arq : TEXT;
  ch : CHAR;
  buf : ARRAY[1..10240]  FO CHAR; {10 KBytes de buffer}
BEGIN
  WRITE (entre com o nome do arquiv);
  READLN (nomearq);
  ASSIGN (arq, nomearq);
  SETTEXTBUF (arq,buf);
  {$I-}
RESET (arq);
  {$I+}
  IF IORESULT <> 0 
    THEN
      WRITELN (arquivo no aberto!!!);
  ELSE
    WHILE NOT EOF (ARQ) DO
      BEGIN
        READ(arq, ch);
        WRITE (ch);
      END;
END.  
