Newsgroup: it.comp.software.tex
Titolo: Tabella automatizzata

Ciao a tutti.
Ho un file di dati (numeri.dat) con il seguente formato:
1
100
2
200
3
300
4
400
*
*
Vorrei inserire tali numeri (che ovviamente sono molti di più) in una 
tabella in modo da ottenere
1  100
2  200
3  300
4  400
Ho provato con il seguente esempio
------------------------------------------------
01    \documentclass[a4paper]{article}
02    \usepackage{ifthen}
03
04    \begin{document}
05        \newcount \devouscire
06        \newread \numeri
07        \immediate\openin\numeri=numeri.dat
08        \def\fine{* }
09
10        \devouscire=0
11        \begin{tabular}{ll}
12            \whiledo{\devouscire=0}{
13                \immediate\read\numeri to \recordA
14                \immediate\read\numeri to \recordB
15                % se \recordA è uguale a \fine ho raggiunto
16                % la fine del file
17                \ifx \recordA \fine
18                    \devouscire=1
19                \else
20                    \recordA & \recordB \\
21                \fi
22            }
23        \end{tabular}
24    \end{document}
------------------------------------------------
ma la linea 20 (che contiene i comandi per l'inserimento delle righe 
nella tabella) mi da problemi in fase di compilazione. Se la sostituisco 
  ad es. con
20                    \recordA \recordB \\
la compilazione ha esito positivo, ma ovviamente non ottengo quello che 
voglio (inoltre quella & _deve_ esserci per cambiare colonna).
Qualcuno sa dirmi dove sbaglio / possibili rimedi?
Grazie
Matteo

 scrive:

Ci sono problemi di vario genere con la definizione che proponi,
perché il \whiledo viene espanso tutto nella prima cella del tabular
e non ottieni nulla.
Io userei una strategia diversa.
\documentclass[a4paper]{article}
\usepackage{ifthen}
\begin{document}
\newcount\devouscire
\newread\numeri
\immediate\openin\numeri=numeri.dat
\newwrite\tabella
\immediate\openout\tabella=numeri.tex
\devouscire=0
  \whiledo{\devouscire=0}{
    \immediate\read\numeri to \recordA
    \immediate\read\numeri to \recordB
    \ifeof\numeri
    \devouscire=1
    \else
    \immediate\write\tabella{\recordA&\recordB\noexpand\\}
    \fi
  }
\immediate\closein\numeri
\immediate\closeout\tabella
\begin{tabular}{ll}
\input{numeri}
\end{tabular}
\end{document}
Ma a quel punto non è meglio filtrare prima il file dei dati?
Ciao
Enrico

 Enrico

 diversamente, ma va bene lo stesso. Grazie del suggerimento.
Una possibilità sarebbe ridefinire il carattere di invio in modo che
si espanda una volta in & ed una volta in \cr
Qualcosa del tipo
{\catcode`\^^M\active%
\gdef\returnisand{&\let^^M\returniscr}%
\gdef\returniscr{\\\let^^M\returnisand}%
\gdef\leggimitutto{%
  \catcode`\^^M\active\let^^M\returnisand%
  \input numeri.dat\relax%
  \catcode`\^^M=5% 
}%
}
nel preambolo e
\begin{tabular}{ll}
\leggimitutto
\end{tabular}
nel testo.
Codice scritto estemporaneamente e non verificato, quindi può darsi
che il disco fisso se ne vada in fumo, il cane ti violenti la ragazza
e ti spunti una seconda testa dall'alluce destro.
Fammi sapere come ti va.
-- 
Giuseppe "Oblomov" Bilotta
[W]hat country can preserve its liberties, if its rulers are not
warned from time to time that [the] people preserve the spirit of
resistance? Let them take arms...The tree of liberty must be
refreshed from time to time, with the blood of patriots and
tyrants.
	-- Thomas Jefferson, letter to Col. William S. Smith, 1787

 
Funziona con una piccola modifica:
\gdef\returniscr{\\ \let^^M\returnisand}%
                    ^(spazio)
Il cane non ce l'ho, ma sono preoccupato per la ragazza del mio vicino...
Grazie e ciao
Matteo

 Il cane non ce l'ho, ma sono preoccupato per la ragazza del mio vicino...
Hai paura che sia lei a violentarti il cane che non hai? ;)
-- 
Giuseppe "Oblomov" Bilotta
"Da grande lotterò per la pace"
"A me me la compra il mio babbo"
(Altan)
("When I grow up, I will fight for peace"
 "I'll have my daddy buy it for me")

 scrive:

Meglio un \relax dello spazio. Devo dire che avevo provato a scrivere 
una cosa simile, ma il tempo mi è mancato.
Ciao
Enrico