2009-09-30 4 views
5

Ho bisogno di filtrare una riga di testo con un numero variabile ma grande di spazi bianchi. Riesco a capire un modo janky di fare un ciclo e aggiungere spazi bianchi a $ pippo, quindi splicing nel testo, ma non è una soluzione elegante.Come inserire un sacco di spazi in Perl?

+1

si dovrebbe chiedere qualcosa come * "come faccio ad inserire un certo numero di spazi bianchi in perl/regex? "* ... –

+1

Qual è la parola" regex "nel tuo titolo? – innaM

+0

Ho incluso espressioni regolari nel titolo (si noti che è stato modificato per chiarezza) poiché presumo che possa esserci un modo hacky di ricorsivamente ricollocare uno spazio con diciamo 10 spazi cinque volte per ottenere un ordine di 10000 spazi. – Timo

risposta

29

Ho bisogno di un po 'più di informazioni. Stai semplicemente aggiungendo del testo o hai bisogno di inserirlo?

In entrambi i casi, un modo semplice per ottenere la ripetizione è l'operatore "x" di Perl, ad es.

" " x 20000 

vi darà 20 K spazi.

Se abbia una stringa esistente ($ s dire) e si desidera pad fuori a 20K, provare

$s .= (" " x (20000 - length($s))) 

BTW, Perl ha an extensive set of operators - vale la pena studiare se siete serio circa la lingua.

AGGIORNAMENTO: La domanda come originariamente richiesta (è stata modificata) ha richiesto circa 20 K spazi, non un "lotto di spazi", quindi il 20K nella mia risposta.

+0

Grazie, funziona perfettamente. Ero sicuro che perl avrebbe avuto una soluzione elegante per farlo, ma le mie capacità di googling mi hanno deluso (anche se ho trovato quel sito che hai menzionato). – Timo

+0

L'ho modificato per renderlo più generalmente utile. "20000" si qualifica ancora come "molto" secondo me. Scusate se qualcuno ha capito il caso. –

+0

Nessuno ha preso il mio caso e penso che le tue modifiche abbiano un senso. Ero solo un po 'preoccupato per il fatto che qualcuno che arriva più tardi potrebbe chiedersi perché ho 20.000 dollari nel mio codice quando non ne parliamo altrove. Sto solo cercando di tenere il passo con l'ethos SO di non solo risolvere il problema di qualcuno, ma creare un repository di domande e risposte utili per i futuri lettori. – dave

4

utilizzare la 'x' operatore:

print ' ' x 20000; 
10

Se si vuole sempre la stringa da una certa lunghezza è possibile utilizzare sprintf:

Ad esempio, per pad fuori $var con uno spazio bianco in modo che 20.000 caratteri uso a lungo:

$var = sprintf("%-20000s",$var); 
+0

L'approccio pulito. E se vuoi gli spazi precedenti, rimuovi il trattino. – FlorianB