0

この種の構造に似たものを含むファイルが与えられました。

12345    ABC  100M 001   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  150

12345    ABC  100M 011   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  80

12345    ABC  100 011   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  80

このファイルから次のセクションを取得する必要があります。

  • それらが類似している場合は、3番目の列(つまり100M)をグループ化します
  • 4番目の列を合計します(3番目の列と同じグループにある場合)
  • 4番目の列に応じて最後の列を合計します

私はなんとか次のことをすることができました:

$List1 = array();
$grab = fopen("file.txt", "r") or die("Can't open file");
$check = fgets($grab);

 while(!feof($grab)) {    
   if (ereg("^[[:digit:]]{5} +ABC +([[:digit:]]{3}[[:alpha:]]?)+ ([[:digit:]]{3})",
     $check, $output)) {
  if (!in_array($output[1], $List1)) {      
    array_push($List1, $output[1]);               
  } 
      if (!in_array($output[2], $List1)) {        
    array_push($List1, $output[2]);                    
  } 
}    
$check = fgets($grab);
 }     
 fclose($grab); 

foreach ($List1 as $list) {
   print "$list <br/>";     
 }

私はなんとかして3番目の列をグループ化することができました。
4番目の列が表示されていますが、同じグループにある場合、3番目の列にグループ化する方法がわかりません。
そして、ファイル/配列の最後のビットを簡単に取得する方法がわかりません。ファイルの最後を取得して追加するためのショートカットはありますか?

私を助けてくれる人に事前に感謝します。

4

1 に答える 1

0

これはそれを行う必要があります:

$string = '12345    ABC  100M 001   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  150

12345    ABC  100M 011   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  80

12345    ABC  100 011   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  80';

$third = array();
$fourth = array();

foreach (explode("\n", $string) as $line)
{
    // Skip empty lines.
    if (empty($line))
        continue;

    // Clean up any excessive white space.
    $line = trim(preg_replace('~[\s]{2,}~', ' ', $line));

    $info = explode(' ', $line);

    if (!isset($third[$info[2]]))
        $third[$info[2]] = array();

    $third[$info[2]][] = $info;

    if (!isset($fourth[$info[3]]))
        $fourth[$info[3]] = 0;

    $fourth[$info[3]] += (int) end($info);
}

print_r(array(
    'third' => $third,
    'fourth' => $fourth,
));
于 2012-11-02T04:36:39.310 に答える