perl split function


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting perl split function
# 1  
Old 05-23-2006
perl split function

Code:
$mystring = "name:blk:house::";
print "$mystring\n";
@s_format = split(/:/, $mystring);

for ($i=0; $i <= $#s_format; $i++) {
print "index is $i,field is $s_format[$i]";
print "\n";
}
$size = $#s_format + 1;
print "total size of array is $size\n";

i am expecting my size to be 5, why is it only 3?
# 2  
Old 05-23-2006
That's an interesting observation of the idiosyncracies of the Perl split() function. From the manpage, the first paragraph reads:

Quote:
Splits the string EXPR into a list of strings and returns that list. By default, empty leading fields are preserved, and empty trailing ones are deleted. (If all fields are empty, they are considered to be trailing.)
It appears strange to me too ... I am not sure if there is a workaround of it.
# 3  
Old 05-23-2006
i agree with cbkihong !!! You could therefore ensure that the last field contains something < != "" > basically not equal to nil .....

i would add something like this to check for it :

$mystring = "name:blk:house::end";
print "$mystring\n";
@s_format = split(/:/, $mystring);

for $i (0 .. $#s_format)
{
if (@s_format[$i] == "") {print "index is ",$i," nothing !\n"; }
else {print "index is $i,field is $s_format[$i]\n";}
}
$size = $#s_format + 1;
print "total size of array is $size\n";

Last edited by fawqati; 05-23-2006 at 06:46 PM.. Reason: missed "end" at $mystring
# 4  
Old 05-23-2006
If you are not really that much concerned with the REAL number of fields, and you expect a fixed number of fields, you will get the same results nevertheless by directly poking into the array returned.

e.g.
Quote:
$fifthField = defined($s_format[4]) || $s_format[4];
That's probably the cause they put it like that, although it seems to be strange still.
# 5  
Old 06-08-2006
just concat with some other character just before splitting.


$string = "name:blk:house::";
@res = split(/[:]/,$string.".");
print "size of array : $#res";
# 6  
Old 06-08-2006
Code:
@s_format = split(/:/, $mystring,10);

Hi all, i added the limiter above, it works. i am not sure of the specifics of the mechanism, but it works.

from the post from cbkihong, i guessed that as long as i make perl think that the trailing empty spaces are not empty, specifying the limit, it works.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

[Solved] Perl Question - split function with csv file

Hi all, I have a csv file that appears as follows: ,2013/03/26,2012/12/26,4,1,"2017/09/26,5.75%","2017/09/26,1,2018/09/26,1,2019/09/26,1,2020/09/26,1,2021/09/26,1",,,2012/12/26,now when i use the split function like this: my @f = split/,/; the split function will split the data that is... (2 Replies)
Discussion started by: WongSifu
2 Replies

2. Shell Programming and Scripting

Perl split function

my @d =split('\|', $_); west|ACH|3|Y|LuV|N||N|| Qt|UWST|57|Y|LSV|Y|Bng|N|KT| It Returns d as 8 for First Line, and 9 as for Second Line . I want to Process Both the Files, How to Handle It. (3 Replies)
Discussion started by: vishwakar
3 Replies

3. UNIX for Advanced & Expert Users

regular expression for split function in perl

Hi, Below is an example of a record I have, which I wish to split using the perl's split function and load it into an array. I am having tough time figuring out the exact reg-ex to perform the split. Given record: "a","xyz",0,2,48,"abcd","lmno,pqrR, stv",300,"abc",20, The delimiter to... (4 Replies)
Discussion started by: jghoshal
4 Replies

4. Shell Programming and Scripting

PERL split function

Hi... I have a question regarding the split function in PERL. I have a very huge csv file (more than 80 million records). I need to extract a particular position(eg : 50th position) of each line from the csv file. I tried using split function. But I realized split takes a very long time. Also... (1 Reply)
Discussion started by: castle
1 Replies

5. Homework & Coursework Questions

PERL split function

Hi... I have a question regarding the split function in PERL. I have a very huge csv file (more than 80 million records). I need to extract a particular position(eg : 50th position) of each line from the csv file. I tried using split function. But I realized split takes a very long time. Also... (0 Replies)
Discussion started by: castle
0 Replies

6. Homework & Coursework Questions

PERL split function

Hi... I have a question regarding the split function in PERL. I have a very huge csv file (more than 80 million records). I need to extract a particular position(eg : 50th position) of each line from the csv file. I tried using split function. But I realized split takes a very long time. Also... (1 Reply)
Discussion started by: castle
1 Replies

7. Shell Programming and Scripting

perl:extract 169008 with split function on /atrclips/u90/2009/169_008

On a line in a file:: /atrclips/u90/2009/169_008/Y5288900/SATHSWR_P1/1809853_SATHSWR_P1.tif,00018098539415200901_SATHSWR_P1.tif How do I use the split function to extract 169008......I tried .... foreach my $line (@lines) { ... (3 Replies)
Discussion started by: bandar007
3 Replies

8. Shell Programming and Scripting

perl-like split function for bash?

Hi! I'm doing bash shell scripting and would like to know if bash had something similar to perl's split function? Ultimately, I want to split two strings (delimeter = '.') and compare each of their values. Thus, I figured putting them in an array would be easiest. So i.e.: String 1:... (5 Replies)
Discussion started by: eur0dad
5 Replies

9. Shell Programming and Scripting

Use split function in perl

Hello, if i have file like this: 010000890306932455804 05306977653873 0520080417010520ISMS SMT ZZZZZZZZZZZZZOC30693599000 30971360000 ZZZZZZZZZZZZZZZZZZZZ202011302942311 010000890306946317387 05306977313623 0520080417010520ISMS SMT ZZZZZZZZZZZZZOC306942190000 30971360000... (5 Replies)
Discussion started by: chriss_58
5 Replies

10. UNIX for Dummies Questions & Answers

split function

Hi all! I am relatively new to UNIX staff, and I have come across a problem: I have a big directory, which contains 100 smaller ones. Each of the 100 contains a file ending in .txt , so there are 100 files ending in .txt I want to split each of the 100 files in smaller ones, which will contain... (4 Replies)
Discussion started by: ktsirig
4 Replies
Login or Register to Ask a Question