Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用(PHP)将每行中的第三个和第四个delimeters从逗号更改为管道_Php - Fatal编程技术网

使用(PHP)将每行中的第三个和第四个delimeters从逗号更改为管道

使用(PHP)将每行中的第三个和第四个delimeters从逗号更改为管道,php,Php,我有一个大约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 现在,我需要将时间前后的每行中的逗号改为pipes。我还需要将它从24小时改为12小时,后面是上午或下午。不幸的是,我是从一个文件而不是数据库中读取这些信息的。所以我需要它看起来像

我有一个大约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
现在,我需要将时间前后的每行中的逗号改为pipes。我还需要将它从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。它一开始是一个报告,我已经能够剥离到上面

提前谢谢你。
蒙特

你可以试试

$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);

好吧,如果日期和时间总是排在第二位和第三位,那么一个解决方案肯定是使用,并且:


下面是完整的代码(但是stackoverflow的存在是为了帮助您解决问题,而不是解决您的问题):

$in=fopen('input.txt','r');
$out=fopen('output.txt','w');
while(($line=fgetcsv($in))!==FALSE){
#您最好使用DateTime类的方法:
$hours=substr($line[2],0,-2);

$line[2]=($hours+12-1)%12+1)。substr($line[2],-2)(($hours到目前为止,你做了什么?我已经能够使用PHP将它带到我上面给出的第一个实例的文本文件中。但是我没有做任何进一步的工作,以使它达到我在第二个实例中需要的内容,因为我丢失了,并且几乎不知道如何将这些逗号更改为管道,或者为此将时间更改为正确的格式。原谅我,因为我对这个还很陌生……谢谢……所以我可以使用上面的命令,但是我需要写入另一个文件。我一直在使用命令:file\u put\u contents(“final\u file.txt”,“$str);为了创建新文件,我的方法正确吗?谢谢MonteThis,当我执行print_r命令时,它只给了我列表中的第一个文件。因此它没有像预期的那样在文件中循环。我真的很感谢你在这方面的帮助。再次感谢MonteThis,虽然我得到了它,但它没有完全工作。我确实有它会像我上面提到的那样转储到一个文件中,但是它只转储在第一整行和第二整行的一部分。我得到的结果如下:
1234567899,05/30/13 | 02:30PM | 10,ANDERSON MONTE
4567891234
这就是我得到的全部。请原谅我的knittl,但我想我丢失了。我正在阅读的主要文件是final_text.txt…我将如何在新的php行中使用上述代码?非常感谢,MonteRead文件,循环每行,按逗号分割(或使用fgetcsv函数),使用我的代码,写入新文件感谢你knittl..我做了一些小的更改,但我真的很难使用|行。再次感谢,你棒极了!
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
)
array_splice($arr, 1, 3, join('|', array_slice($arr, 1, 3));
$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);
}