in reply to Re^2: Converting File Delimiters
in thread Converting File Delimiters

"I used your example and added file references but the script is not outputting all of the rows."

You haven't shown any input or output!

I am unable to reproduce your problem using your code above (with just the filenames changed). My script (pm_csv_to_psv_fhs.pl) has:

my $FileIn = './pm_csv_to_psv_fhs.in'; my $FileOut = './pm_csv_to_psv_fhs.out';

Here's a verbatim run showing input and (before and after) output:

ken@ganymede: ~/tmp $ cat pm_csv_to_psv_fhs.in a,b,"c,d",e "f,g,h",i,j,"k,l" m,n,o,p,q,r,s,t "u,v,w,x,y,z" ken@ganymede: ~/tmp $ cat pm_csv_to_psv_fhs.out cat: pm_csv_to_psv_fhs.out: No such file or directory ken@ganymede: ~/tmp $ pm_csv_to_psv_fhs.pl ken@ganymede: ~/tmp $ cat pm_csv_to_psv_fhs.out a|b|c,d|e f,g,h|i|j|k,l m|n|o|p|q|r|s|t u,v,w,x,y,z ken@ganymede: ~/tmp $

Please show equivalent information for a run of your script.

Here's some other points to consider: all documented in open.

Given you're new to Perl, you may be finding the documentation for open to be a little heavy going. If so, read perlopentut first - it provides a gentler introduction to the subject.

-- Ken

Replies are listed 'Best First'.
Re^4: Converting File Delimiters
by mmueller44 (Novice) on Aug 14, 2012 at 01:31 UTC

    Ok, I figured out that the script is failing on the first row that contains the double-quotes around the field with the comma contained within the field.

    See rows two and three in the data below. This is a very small sample, actual file has more columns and 25000 rows .

    988A5521, 98_1V_HB, Hel Product Pool (Pds Dd), false, store, false 988A5707, 98_1V_HB, "Chinook, IPT ME Support", false, store, false 988A5708, 98_1V_HB, "Chinook, ME Factory Supt", false, store, false 988A5761, 98_1V_HB, Tandem Rotor Configuration, false, store, false

    In my case it stops on row 68, which is row 2 in the above sample. Would like it to look like sample below

    988A5521|98_1V_HB|Hel Product Pool (Pds Dd)|false| store|false 988A5707|98_1V_HB|Chinook, IPT ME Support|false|store|false 988A5708|98_1V_HB|Chinook, ME Factory Supt|false|store|false 988A5761|98_1V_HB|Tandem Rotor Configuration|false|store|false

    Any Ideas why it would die on the row with the double-quotes? Thanks, Mike

      This works:

      C:\test>perl -ple"$_ = join '|', m[(\s*\x22[^\x22]+\x22\s*|[^,]+)]g" 988A5521, 98_1V_HB, Hel Product Pool (Pds Dd), false, store, false 988A5521| 98_1V_HB| Hel Product Pool (Pds Dd)| false| store| false 988A5707, 98_1V_HB, "Chinook, IPT ME Support", false, store, false 988A5707| 98_1V_HB| "Chinook, IPT ME Support"| false| store| false 988A5708, 98_1V_HB, "Chinook, ME Factory Supt", false, store, false 988A5708| 98_1V_HB| "Chinook, ME Factory Supt"| false| store| false 988A5761, 98_1V_HB, Tandem Rotor Configuration, false, store, false 988A5761| 98_1V_HB| Tandem Rotor Configuration| false| store| false ^Z

      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

      The start of some sanity?

        Thanks! This worked great! Thanks Again, Mike