Newsgroup: it.comp.lang.perl
Titolo: print con tabulazione

>scooter
Modello xyz
Colore biano
Colore giallo
Cilindrata 180
Cillindrata 200
Cilindrata 500
etc
e voglio ottenere una tabella del tipo
scooter    Colore    Cilindrata
xyz           bianco    180
                giallo       200
                               500
Il problema è che nel mio file i campi sono di lunghezza variabile
(molto variabile), quindi non risco a incolonnarli con dei \t ripetuti.
Esiste un print che mi dia la possibilità di dare la distanza da inizio
riga per ogni "pezzo" che voglio stampare?
Giuro che ho provato a vedere nelle faq ma non ho trovato risposta :)
(magari sono cecato.. possibile)
Grazie

Ok, nel messaggio appena spedito mi sono accorto che i campi non sono
incolonnati, io li voglio uno sotto l'altro...

 
Hai provato a guardare perlform nella documentazione?
Spiega appunto come utilizzare la formattazione dell'output.
D'altra parte, perl è nato come linguaggio per report, quindi sarebbe
assurdo se non si potesse fare! :)
Ciao,
-- 
+--------+ ASCII ribbon campaign ( )
|  kral  |  - against HTML email  X 
+--------+              & vCards / \


Se ho capito perldoc -f printf ?
--
http://www.pigmalion.info/
Internet è uno dei veicoli più validi per la difesa della libertà,
poiché offre la verità a chi vuole vederla e intenderla...
Vinton G. Cerf

 Grazie
Il suggerimento di usare printf() e` corretto.
Segnalo anche Text::Reform, che in qualche modo e` l'erede
di format e compagnia (in Perl 6 i format non saranno piu`
nel core language).
ciao,
S.
-- 
http://larsen.perlmonk.org

 nel core language
Veramente? Io sinceramente non li ho mai usati, ma mi chiedo il come mai
di questa decisione?


di questa decisione?
 
http://dev.perl.org/perl6/rfc/181.html
 
http://dev.perl.org/perl6/rfc/230.html
Non che dica molto sul perché, veramente. Inoltre, la prima è "retracted",
che immagino voglia dire ritrattato, e l'altra "frozen", che qualche cosa
anche lui vorrà pur dire. La sintassi proposta, in ogni caso, è
ragionevolmente simile all'attuale da non creare problemi anche ai più
incalliti utilizzatori di format.
Ciao.

 Spiega appunto come utilizzare la formattazione dell'output.
Grazie!
Ho guardato la documentazione, ma non riesco ancora ad ottenere quello
che voglio.
Ho scritto:
$i=0;
while ( $array1[$i] or $array2[$i] or $array3[$i] )
{
    $str = formline << 'END', $array1[$i], $array2[$i], $array3[$i] ;
    @<<<  @<<<  @<<<
    $i++ ;
}
print "$^A\n";
il mio problema č che a seconda delle ricerche che faccio gli elementi
dei vari array variano da pochi caratteri fino a piů di 50, e chiaramente
nel caso sopra me ne stampa solo 4.
C'č un modo per dare il numero di  <<<<  a seconda della lunghezza del
maggiore elemento di ogni array?
Ciao
Fabrizio

maggiore elemento di ogni array?
Non ti basta prevedere un certo numero di caratteri, in cui presumibilmente
staranno tutte le stringhe? Tanto, avrai comunque dei vincoli sull'ampiezza
delle colonne.
Comunque, ci sono anche delle specifiche di formato per stampare su più
righe.
Ci sono anche altri moduli per la formattazione di testo e la generazione
di tabelle: Text::ASCIITable, Text::Autoformat, ecc.
Considera anche, se quello che devi fare te lo consente, la possibilità di
utilizzare formati più complessi (html, TeX, ecc.), in cui la formattazione
della tabella sarebbe risolta a posteriori dal browser o dal compilatore.
Ciao.

 che voglio.
Ti consiglio di seguire i consigli del Sig. Zezza e del Sig. Rodighiero,
utilizzando i moduli della famiglia Text::*. Anche perchè,
probabilmente, offrono maggiori potenzialità rispetto al format nativo.
(Che, ribadisco, non ho mai avuto occasione di utilizzare, ma che ho
sempre considerato un'idea geniale)


sempre considerato un'idea geniale)
L'ho usato pochissime volte, ma quelle poche volte mi ha salvato la vita.
Parlo perň dei lontani anni '90 (forse addirittura fine '80), delle antiche
stampanti ad ago, e dei sempre rimpianti caratteri a spaziatura fissa. E,
naturalmente, del buon caro Perl 4.
Oggi come oggi, per la stampa preferisco (e devo, per assecondare le
richieste di formattazione dei committenti) passare attraverso un formato
tipografico intermedio.
Purtroppo, i tempi in cui tutti si accontentavano di un tabulato in Courier
12 a spaziatura fissa sono passati (almeno, nell'ambito in cui lavoro io).
Per i nostalgici, il modulo per generare tabelle piů semplice da utilizzare
mi č sembrato Text::FormatTable.
Ciao.

 semplice da utilizzare mi è sembrato Text::FormatTable.
Concordo, pur lavorando in un campo dove il Courier e la spaziatura
fissa sono ancora ampiamente utilizzate (campo buste paga). Però penso
che per la generazione di log, come ad esempio quei programmi che non
necessitano di interfaccia o quelli di puro calcolo (anche se in questo
caso non userei Perl!), non definirei nostalgico l'uso di
Text::FormatTable.


 della tabella sarebbe risolta a posteriori dal browser o dal compilatore.
Pensandoci la cosa migliore sarebbe quella di preparare un file per un foglio
elettronico.
Avete per caso idea di dove posso scartabellare per trovare suggerimenti?
Oltretutto si possono creare file "standard" che apre sia excel sia un foglio
elettronico di linux?
Ciao
Fabrizio

elettronico di linux?
Non c'č un formato "standard" per i fogli elettronici. Un foglio Excel puoi
sperare di aprirlo sotto Linux con OpenOffice. Oppure puoi usare un formato
piů semplice, che si possa importare in un foglio elettronico. La cosa piů
semplice (se la formattazione non č un problema) potrebbe essere CSV o testo
con tabulazioni. Altrimenti hmtl o xml.
Ciao.