2013-06-05 5 views
8

Sto provando a dividere una stringa in una matrice con la divisione che si verifica negli spazi bianchi. Ogni blocco di testo è separato da numerosi spazi (variabili).Split Variable on white space

Ecco la stringa:

NUM8   host01 1,099,849,993 1,099,849,992    1 

Ho provato quanto segue senza successo.

my @array1 = split//, $VAR1; 

my @array1 = split/+/, $VAR1; 

my @array1 = split /\s/, $VAR1; 

my @array1 = split /\s+/, $VAR1; 

mi piacerebbe finire con:

$array1[0] = NUM8 
$array1[1] = host01 
$array1[2] = 1,099,849,993 
$array1[3] = 1,099,849,992 
$array1[4] = 1 

Qual è il modo migliore per dividere questo?

Grazie!

+1

L'ultima opzione dovrebbe funzionare, quindi la mia ipotesi è che devi alcune schede là dentro possibilmente. – squiguy

+0

Quale risultato hai ottenuto dai tuoi tentativi? L'ultimo metodo che hai usato dovrebbe funzionare. – doubleDown

+0

@squiguy: '\ s' corrisponde alle schede. Il problema è che Perl restituirà una lista con un campo iniziale di lunghezza zero se la stringa inizia con un separatore. – Borodin

risposta

21

Se il primo argomento su split è la stringa '' (lo spazio), è speciale. Deve corrispondere spazi di qualsiasi dimensione:

my @array1 = split ' ', $VAR1; 

(BTW, è quasi equivalente alla vostra ultima opzione, ma elimina anche qualsiasi spazio.)

+1

+1 simpatico .. non lo sapevo. –

+0

Sembra funzionare! Grazie – hallert

9

Basta provare a utilizzare:

my @array1 = split(' ',$VAR1); 

Codepad Demo

Da Perldoc:

Come un altro caso speciale, split emula il comportamento predefinito dello strumento di riga di comando awk quando il PATTERN è omesso o una stringa letterale composta da un carattere di spazio singolo (come "" o "\ x20", ma non ad es//). In questo caso, un qualsiasi spazio in EXPR è rimossi prima di sciogliersi verifica

+0

Funziona anche – hallert

4

\s+ partite 1 o più spazi vuoti, e diviso su di essi

my @array1 = split /\s+/, $VAR1; 
+0

. Forse la mia produzione è variata mentre stavo testando, quindi mi ha buttato fuori. Sembra che tutte le risposte qui funzionino. – hallert