Splitting large CSV in smaller CSV

By | January 6, 2018

I had to use a tool today that gave me a frustrating error: “your csv file have more than a 1000 rows”. I had multiple CSVs that had more than 1000’s of rows actually, so splitting it manually would have been a total waste of time and sanity. That’s where PowerShell came in handy. As it took me more than 5 minutes to get the script right, I’m sharing it here.
The script is looking for all CSV’s within a defined folder ($location variable in the configuration), and split them by the number of rows defined in $rowsMax.
It is also removing the quotes in the CSV as by default export-csv generates quotes.

Hopefully, this works for you too!

4 Kudos

8 thoughts on “Splitting large CSV in smaller CSV

    1. Dan

      Thanks Jesse, I was having the same issue and your suggestion helped.

  1. Markos

    There’s an error in the for loop, I had to change it to for($i=$rowsMax; $i -le $content.length ;$i+=$rowsMax). Your loop only selects 1 record in 1st iteration ($i=1) and never actually gets to the end of the file.
    Thanks for the script though, it saved me lot of time.

  2. kluo

    I have a file 340 lines, and the script only pop out 300 lines in a new file, left out 40 lines no output. Do you know what is wrong?

  3. kluo84

    I have a csv file with 350 lines, the script gave the out put of 300 lines but didn’t give any output for the last 50 lines. Any help? Thanks

  4. moubai

    got the same problem for FullName + bad loop
    except to get 1091 row with 30Rowsmax, but get 1080 row instead.
    So i change a little thing

    $insertLocation = ($_.Name.Length – 4);
    $length = $content.length + $rowsMax
    for($i=$rowsMax; $i -le $length;$i+=$rowsMax){

    Now i get all my row.
    the error is due the -le parameter, when you get the $rowmax = 1080
    1080 + 30 = 1100 = Larger than 1091, so the loop end.
    if you had $rowsMax + length, you go over a little of then end, but with no error