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 小时制,并在后面加上 AM 或 PM。不幸的是,我正在从文件而不是从数据库中读取所有这些内容。所以我需要它最终看起来像这样:

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

好吧,如果日期和时间总是排在第二位和第三位,那么肯定的一种解决方案是使用array_splice,array_slicejoin/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 回答