私は非常に大きな機能を持っていることがあります。その機能はスクリプトの他の部分では使用されないため、「圧縮」や小さな機能に分離することは非常に困難です。関数を複数回使用する場合にのみ関数を作成する必要がありますか?
私はスクリプトの他の部分で使用されない関数を作成すべきか、複数回使用する場合にのみ作成する必要があるのかについてアドバイスしたいと思います。
ありがとうございます!
概要:
- は、ディレクトリ内のファイルの情報で配列を塗りつぶします。
- TXTを1行ずつ処理し、TXTのIDが「完了」ファイル配列と一致するかどうかを調べ、それを外部製品に公開します。そうでない場合は、他のアレイをチェックインして、欠落しているもののレポートを作成します。
- アレイで見つかったエラーを に保存してから、errors.txt
- ファイルに保存します。最後に、レポートを返します。
現在、私の機能は次のとおりです。
protected function processScanned()
{
try
{
// EJECUTAR BASH DE NAHUEL
//
//
$PdfCPList = $this->model->getDirFilenames($this->model->dirCartasPorte, 'pdf');
$PdfTBList = $this->model->getDirFilenames($this->model->dirTicketsBalanza, 'pdf');
$PdfCompList = $this->model->getDirFilenames($this->model->dirCompletos, 'pdf');
$PdfUnreconList = $this->model->getDirFilenames($this->model->dirSinReconocer,'pdf');
// Adjuntar Novedades
$newsToProcess = $this->model->getDirFilenames($this->model->dirNovedades, 'txt', true);
$this->appendNewsFiles($newsToProcess);
$report = array();
$report['info'] = array(
'Documentos procesados correctamente'=>0,
'Fecha de última actualización de datos'=>date('d/m/Y H:i:s',(int)file_get_contents($this->model->uriTxtInfo)),
);
if($file = fopen($this->model->uriTxtProcesar, 'r'))
{
$i = 0;
$errors_file = fopen($this->model->uriTxtErrores,'w');
while($line = fgets($file))
{
if(! preg_match('/^\s/', $line))
continue;
$lineData = array(
'id'=> substr($line,3,9),
'prefix'=>'1234-' . $i,
'suffix'=>'1234-' . $i,
'partner'=>'FAZON TIMBUES OMHSA',
'date'=>time() - 222,
);
$i++;
$keywordsToPublish = array(
'Nº de Operacion'=>$lineData['id'],
'Prefijo'=>$lineData['prefix'],
'Sufijo'=>$lineData['suffix'],
'Socio'=>$lineData['partner'],
'Fecha'=>date('Y/d/m',$lineData['date']),
);
if($this->model->findInDocusearch($lineData['id']))
{
continue;
}
if(array_key_exists($lineData['id'], $PdfCompList))
{
$lineData['docName'] = 'Carta de Porte - Ticket de Balanza';
$lineData['docId'] = 'CP-TB';
$lineData['path'] = $this->model->dirCompletos . '/' . $lineData['id'] . '.pdf';
if($id = $this->model->publishInDocusearch($lineData, $keywordsToPublish)) {
$report['info']['Documentos procesados correctamente']++;
link($this->model->dirDocusearchRepo . '/' . $id . '.pdf',
$this->model->dirBackupCliente . '/' . $lineData['partner'] . '_' . date('Ymd',$lineData['date']) . '_' . $lineData['id'] . '.pdf'
);
}
unset($PdfCompList[ $lineData['id'] ]);
}
else
{
fwrite($errors_file, $line); // Guarda la fila leida en el archivo de errores.
// Valores por defecto
$report[ 'errors' ][ $lineData['id'] ]['date'] = $lineData['date'];
$report[ 'errors' ][ $lineData['id'] ]['id'] = $lineData['id'];
$report[ 'errors' ][ $lineData['id'] ]['type'] = 'nn';
$report[ 'errors' ][ $lineData['id'] ]['actions'] = array();
// Valores por defecto
if(array_key_exists($lineData['id'], $PdfCPList))
{
$report[ 'errors' ][ $lineData['id'] ]['reportMsg'] = 'Falta Ticket de Balanza.';
$report[ 'errors' ][ $lineData['id'] ]['type'] = 'cp';
unset($PdfCPList[ $lineData['id'] ]);
}
elseif(array_key_exists($lineData['id'], $PdfTBList))
{
$report[ 'errors' ][ $lineData['id'] ]['reportMsg'] = 'Falta Carta de Porte.';
$report[ 'errors' ][ $lineData['id'] ]['type'] = 'tb';
unset($PdfTBList[ $lineData['id'] ]);
}
else
{
$report[ 'errors' ][ $lineData['id'] ]['reportMsg'] = 'Ningún archivo digitalizado.';
}
}
}
fclose($file);
fclose($errors_file);
$this->fileRename($this->model->uriTxtErrores, $this->model->uriTxtProcesar);
foreach($PdfCompList as $key=>$value)
{
$report[ 'errors' ][ $key ] = array(
'reportMsg'=>'Falta en archivo de datos del sistema externo.',
'date'=>$value['date'],
'id'=>$key,
'type'=>'co',
'actions'=>array('get','rename','delete'),
);
}
foreach($PdfCPList as $key=>$value)
{
$report[ 'errors' ][ $key ] = array(
'reportMsg'=>'Carta de Porte no utilizada.',
'date'=>$value['date'],
'id'=>$key,
'type'=>'cp',
'actions'=>array('get','rename','delete'),
);
}
foreach($PdfTBList as $key=>$value)
{
$report[ 'errors' ][ $key ] = array(
'reportMsg'=>'Ticket de Balanza no utilizado.',
'date'=>$value['date'],
'id'=>$key,
'type'=>'tb',
'actions'=>array('get','rename','delete'),
);
}
foreach($PdfUnreconList as $key=>$value)
{
$report[ 'errors' ][ $key ] = array(
'reportMsg'=>'Documento no reconocido.',
'date'=>$value['date'],
'id'=>$key,
'type'=>'un',
'actions'=>array('get','rename','delete'),
);
}
return $report;
}
else
{
throw new Exception('No se pudo abrir el archivo TXT');
}
}
catch(Exception $e)
{
$this->mensaje = $e->getMessage();
header('HTTP/1.1 500 ' . $this->mensaje);
}
}
主に意見に基づいています:あなたにはより多くの概要を提供するのに役立つ場合にのみ行います –
あなたの機能を論理的な部分に分けることができれば、どうして? – Theraot
大きな関数は小さい関数に分割するのに適しています。理想的には、関数には本体内に数行以上のコードがありません。 – Bart