2009-09-11 8 views
10

que tienen una cadena que con varias partes separadas por pestañas:¿Cómo puedo dividir una cadena en solo dos partes con Perl?

Hello\t2009-08-08\t1\t2009-08-09\t5\t2009-08-11\t15 

quiero dividirlo sólo en la primera pestaña, por lo que "Hola" termina en $k yy resto termina en $v. Esto no funciona:

my ($k, $v) = split(/\t/, $string); 

¿Cómo puedo hacer eso?

+3

En realidad, acabo de leer el documento para split(), estaba desconcertado; Google, y vino aquí. Donde encontré la respuesta. – Chap

Respuesta

36

Con el fin de conseguir esto, es necesario utilizar el 3er parámetro para split(), lo que da la función de un número máximo de campos de dividirse en (si es positivo):

my($first, $rest) = split(/\t/, $string, 2); 
+0

¿Qué sucede si la longitud del valor es incierta y quiero capturarlo en $ v? El formato $ v se verá como date_1 \ tvalue_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ... – biznez

+2

Esto capturará "date_1" en $ k, y "value_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ..." en $ v. Para obtener más información, enlacé a la página de referencia de perldoc en la función 'split()': explicará cómo funciona con todos los detalles que pueda desear. Te sugiero que lo leas. Perldoc es muy informativo. –

7

Nº Le dará los dos primeros elementos y tira el resto. Pruebe esto:

my ($k, $v) = split(/\t/, $string, 2); 
+0

¿Qué sucede si la longitud del valor es incierta y quiero capturarlo en $ v? El formato $ v se verá como date_1 \ tvalue_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ... – biznez

+0

Como dijo Chris Lutz en su comentario, el número le dice a Perl en cuántas partes se divide. Entonces, con un valor de 2, la primera parte va en $ v, la primera \ t en consumida en la división, y el resto de la cadena no cambia a $ v. –

1

Otra opción sería utilizar una expresión regular simple.

my($k,$v) = $str =~ /([^\t]+)\t(.+)/; 
Cuestiones relacionadas