1

約30行または40行のファイルがあります。ファイルはこれに似ています:

1234567899,05/30/13,1430,10,ANDERSON MONTE
4567891234,06/01/13,930,10,ANDERSON JENNIFER
7891234567,06/02/13,1515,10,ANDERSON MONTE

今、私はパイプへの時間の周りにこれまでの行のコンマを変更する必要があります。また、午前または午後を後ろにして、24時間制から12時間制に変更する必要があります。残念ながら、私はデータベースからではなく、ファイルからこれらすべてを読んでいます。だから私はそれがこのように見えるようになる必要があります:

1234567899,05/30/13|02:30PM|10,ANDERSON MONTE
4567891234,06/01/13|09:30AM|10,ANDERSON JENNIFER
7891234567,06/02/13|03:15PM|10,ANDERSON MONTE

どんな助けでもいただければ幸いです。できればPHPを使いたいです。それは私が上記に分解することができたという報告として始まりました。

前もって感謝します。
モンテ

4

2 に答える 2

0

あなたが試すことができます

$files = file("log.txt");
$list = array();

foreach ( $files as $data ) {
    $data = explode(",", $data);
    $time = sprintf("%s|%s|%s", 
            $data[1], 
            DateTime::createFromFormat("Gi", str_pad($data[2], 4, "0", STR_PAD_LEFT))->format("h:iA"), 
            $data[3]);
    $list[] = implode(",", array($data[0],$time,$data[4]));
}

echo "<pre>";
print_r($list);

出力

Array
(
    [0] => 1234567899,05/30/13|02:30PM|10,ANDERSON MONTE

    [1] => 4567891234,06/01/13|09:30AM|10,ANDERSON JENNIFER

    [2] => 7891234567,06/02/13|03:15PM|10,ANDERSON MONTE
)
于 2013-03-08T16:56:14.797 に答える
0

ええと、日付と時刻が常に2番目と3番目になる場合、確実な1つの解決策は、、および/を使用array_spliceするarray_sliceことjoinですimplode

array_splice($arr, 1, 3, join('|', array_slice($arr, 1, 3));

完全なコードは次のとおりです(ただし、stackoverflowは、問題を解決するためではなく、問題を解決するために存在します)

$in = fopen('input.txt', 'r');
$out = fopen('output.txt', 'w');
while(($line = fgetcsv($in)) !== FALSE) {
  # you're probably better off using methods of the DateTime class:
  $hours = substr($line[2], 0, -2);
  $line[2] = (($hours+12-1)%12+1) . substr($line[2], -2) . (($hours<12)?'AM':'PM');

  array_splice($line, 1, 3, join('|', array_slice($line, 1, 3));

  $fputcsv($out, $line);
}
于 2013-03-08T16:56:15.133 に答える