php Convert text file to csv output
php Convert text file to csv output
This class provides a quick and easy way to convert a fixed-width CSV file. It can be used to perform iteration using a SplFileObject, making it very efficient as an iterator only knows about the current member. Options are provided to specify the end of line character and field delimiter. This from CSV files. This class is particularly useful if data needs to come from a fixed-width file and be inserted into a database, since most databases support data input from CSV files.
A handy feature of this class is the ability to skip fields if they are not needed in the output. The field array is provided, providing a key/value pair, with the primary value holding the offset, or starting field's position, and the value containing the width, or length of the field. For example. 12="10 is a field that starts at 12 bits and the width or length of the field is 10 characters.
The bottom line character defaults to "n", but can be set to any character.
Thedelimiter defaults to a comma, but can be set to any character, or to the character
. The output from the file can be used directly, written to a file, inserted into a database or for any other purpose. >
/*** Class to convert fixed width files into CSV format
* Allows to set fields, separator, and end-of-line character
*
* @author Kevin Waterson
* @url http://phpro.org
* @version $Id$
*
*/
class fixed2CSV extends SplFileObject
{
/**
*
* Constructor, duh, calls the parent constructor
*
* @access public
* @param string The full path to the file to be converted
*
*/
public function __construct ( $filename )
{
parent :: __construct ( $filename );
}
* Settor, is called when trying to assign a value to non-existing property
*
* @access public
* @param string $name The name of the property to set
* @param mixed $value The value of the property
* @throw Excption if property is not able to be set
*
*/
public function __set ( $name , $value )
{
switch( $name )
{
case ' eol' :
case 'fields' :
case 'separator' :
$this -> $name = $value ;
break;
default:
throw new Exception ( "Unable to set $name " );
}
}
*
* Gettor This is called when trying to access a non-existing property
*
* @access public
* @param string $name The name of the property
* @throw Exception if proplerty cannot be set
* @return string
*
*/
public function __get ( $name )
{
switch( $name )
{
case 'eol' :
return "n" ;
return array();
return ',' ;
throw new Exception ( " $name cannot be set" );
}
}
*
* Over ride the parent current method and convert the lines
*
* @access public
* @return string The line as a CSV representation of the fixed width line, false otherwise
*
*/
public function current ()
{
if( parent :: current () )
{
$csv = '' ;
$fields = new cachingIterator ( new ArrayIterator ( $this -> fields ) );
foreach( $fields as $f )
{
$csv .= trim ( substr ( parent :: current () , $fields -> key (), $fields -> current () ) );
$csv .= $fields -> hasNext () ? $this -> separator : $this -> eol ;
}
return $csv ;
}
return false ;
}
} // end of class
{
/*** the fixed width file to convert ***/
$file = new fixed2CSV ( 'my_file.txt' );
$file -> fields = array( 0 => 10 , 10 => 15 , 25 => 20 , 45 => 25 );
foreach( $file as $line )
{
echo $line ;
}
$new = new fixed2CSV ( 'my_file.txt' );
$new -> fields = array( 0 => 10 , 25 => 20 );
foreach( $new as $line )
{
echo $line ;
}
catch( Exception $e )
{
echo $e -> getMessage ();
}