php テキスト ファイルを CSV 出力に変換します
php テキスト ファイルを CSV 出力に変換します
このクラスは、固定幅の CSV ファイルをすばやく簡単に変換する方法を提供します。 SplFileObject を使用して反復を実行するために使用でき、反復子は現在のメンバーについてのみ知っているため、非常に効率的になります。行末文字とフィールド区切り文字を指定するオプションが提供されています。 CSV ファイルからのこれ。ほとんどのデータベースは CSV ファイルからのデータ入力をサポートしているため、データを固定幅ファイルから取得してデータベースに挿入する必要がある場合、このクラスは特に便利です。
このクラスの便利な機能は、出力でフィールドが必要ない場合にフィールドをスキップできることです。フィールド配列が提供され、キーと値のペアが提供されます。主な値はオフセットまたはフィールドの開始位置を保持し、値はフィールドの幅または長さを含みます。例えば。 12="10 は 12 ビットで始まるフィールドで、フィールドの幅または長さは 10 文字です。
最後の行の文字のデフォルトは「n」ですが、任意の文字に設定できます。
区切り文字のデフォルトは次のとおりです。カンマですが、任意の文字に設定できます
ファイルからの出力は、直接使用したり、ファイルに書き込んだり、データベースに挿入したり、その他の目的に使用したりできます
/**
* 固定幅ファイルを CSV 形式に変換するクラス* フィールド、区切り文字、行末文字を設定できます
*
* @author Kevin Waterson
* @url http://phpro.org
* @version $ID$
*
*/
class fixed2CSV extends SplFileObject
{
/**
*
* コンストラクターは、親コンストラクターを呼び出します
*
* @access public
* @param string 変換するファイルへのフルパス
*
*/
public function __construct ( $filename )
{
parent :: __construct ( $filename );
}
/*
*
* @access public
* @param string $name 設定するプロパティの名前
* @parammixed $value プロパティの値
* @throw プロパティが次の場合は例外設定できません
*
*/
public function __set ( $name , $value )
{
switch( $name )
{
case 'eol' :
case 'fields' :
case 'separator' :
$this -> $name = $value ;
break;
default:
{
switch( $name )
{
case 'eol' :
case 'fields' :
return array();
case 'separator' :
return ', ' ;
デフォルト:
新しい例外をスローします ( " $name を設定できません" );
}
/**
*
* Gettor 存在しないプロパティにアクセスしようとしたときに呼び出されます
*
* @access public
* @throw プロパティを設定できない場合は例外
* @return文字列
*/
public function current ()
if(parent :: current ( ) )
{
$csv = '' ;
$fields = new cachingIterator ( new ArrayIterator ( $this ->fields ) );
{
$csv .= Trim (親 :: 現在の ()、$フィールド -> 現在の () ) ); $this -> 区切り文字-> eol ;
return $csv ;
return false ; >
使用例使用例
try
/ **
*
* 親の現在のメソッドをオーバーライドして行を変換します
*
* @access public
* @return string 固定幅の線の CSV 表現としての線、それ以外の場合は false
*
*/
$file = 新しいfixed2CSV ( 'my_file.txt' );
/*** 変換する固定幅ファイル ***/
$file -> フィールド = array( 0 => 10 , 10 => ; 15 , 25 => 20 , 45 => 25 );
/*** 開始位置 => 各フィールドの幅 ***/
echo $line ; #&*/
$new = 新しいfixed2CSV ( 'my_file.txt' );/*** 変換された行を出力します ***/$new -> フィールド = array( 0 => 10 , 25 => 20 ) ;
/*** 新しいインスタンス ***/
foreach( $new as $line )
{
echo $line ;
}
{
echo $e -> getMessage ( );
}
?>