# encoding: ascii
# api: powershell
# title: Split
# description: Split a file into smaller files.
# version: 0.1
# type: function
# author: tojo2000
# license: CC0
# x-poshcode-id: 2993
# x-archived: 2012-02-05T05:21:16
# x-published: 2012-10-08T10:57:00
#
#
function Split {
<#
.Synopsis
Splits up a file into smaller files.
.Description
This function takes a file as input and splits it into files by a set number of
lines.
.Parameter filename
The name of the file to be used as an input.
This value can be piped to the function (see examples)
.Parameter lines
The number of lines per file.
.Parameter prefix
A prefix for the output filenames.  Defaults to 'split.'
.Parameter extension
The file extension to use for output files.
.Example
# Simple split of a file.
Split -filename mybigfile.txt -lines 100
.Example
# Pass a number of files by pipeline, filtering out directories
ls | ?{-not $_.PSIsContainer} | %{$_.FullName} | Split -lines 100
#>
  param([Parameter(Mandatory=$true,
                   ValueFromPipeLine=$true)]
        [string]$filename,
        [Parameter(Mandatory=$true)]
        [int]$lines,
        [Parameter(Mandatory=$false)]
        [string]$prefix = 'split.',
        [Parameter(Mandatory=$false)]
        [string]$extension = 'txt')
        
  if (-not (Test-Path $file)) {
    Write-Host "$file not found!"
    break
  }
  
  $increment = 0
  $line = 0
  
  Get-Content $file |
    %{
      $line += 1
      
      if (-not ($lines % $line)) {
        $increment += 1
      }
      
      $_ >> "$file.$increment.$extension"
    }  
}
