使用(PHP)将每行中的第三个和第四个delimeters从逗号更改为管道
我有一个大约30或40行的文件。该文件看起来与此类似:使用(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小时,后面是上午或下午。不幸的是,我是从一个文件而不是数据库中读取这些信息的。所以我需要它看起来像
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);
}