2012-04-12 91 views
1

我有以下代码,读取一个TXT文件,从每一行中取出不需要的信息,然后将编辑的行存储在一个新的TXT文件中。对于TXT中的每一行PHP,增加变量的值?

<?php 
$file_handle = fopen("old.txt", "rb"); 
ob_start(); 

while (!feof($file_handle)) { 

$line_of_text = fgets($file_handle); 
$parts = explode('\n', $line_of_text); 

foreach ($parts as $str) { 
$str_parts = explode('_', $str); // Split string by _ into an array 
array_pop($str_parts); // Remove last element 
array_shift($str_parts); // Remove first element 
echo implode('_', $str_parts)."\n"; // Put it back together (and echo newline) 
} 
} 

$new_content = ob_get_clean(); 
file_put_contents("new.txt", $new_content); 

fclose($file_handle); 
?> 

我现在想要插入$ hr #min和$ sec变量,每次保存新行时将增加1秒。比方说,我的台词这样写的(旧代码):

958588 
978567 
986766 

我想我的新的代码看起来像这样:

125959958588 
130000978567 
130001986766 

正如你所看到的,一小时是24小时格式(00 - 23),然后是分钟(00-59)和秒(00-59),结束时提取的txt。

我放下了可变框架,但我不知道如何让vriables正确增加。有人可以帮忙吗?

<?php 
$file_handle = fopen("old.txt", "rb"); 
$hr = 00; 
$min = 00; 
$sec = 00; 
ob_start(); 

while (!feof($file_handle)) { 

$line_of_text = fgets($file_handle); 
$parts = explode('\n', $line_of_text); 

foreach ($parts as $str) { 
$str_parts = explode('_', $str); // Split string by _ into an array 
array_pop($str_parts); // Remove last element 
array_shift($str_parts); // Remove first element 
echo $hr.$min.$sec.implode('_', $str_parts)."\n"; // Put it back together (and echo newline) 
} 
} 

$new_content = ob_get_clean(); 
file_put_contents("new.txt", $new_content); 

fclose($file_handle); 
?> 
+0

在什么时候一定时间计数器开始? – elxordi 2012-04-12 19:48:33

+0

这个尖叫出来 - 使用数据库,而不是一个平面文件。 – 2012-04-12 19:48:50

+0

我无法使用数据库,我必须解析文件 – Sweepster 2012-04-12 19:51:15

回答

1

我会去要容易得多:

<?php 
$contents = file('old.txt'); 
$time = strtotime('2012-01-01 00:00:00'); // Replace the time with the start time, the date doesn't matter 
ob_start(); 

foreach ($contents as $line) { 
    $str_parts = explode('_', $line); // Split string by _ into an array 
    array_pop($str_parts); // Remove last element 
    array_shift($str_parts); // Remove first element 

    echo date('His', $time) . implode('_', $str_parts) . "\n"; // Put it back together (and echo newline) 

    $time += 1; 
} 

$new_content = ob_get_clean(); 
file_put_contents("new.txt", $new_content); 
+0

这样做了!谢谢! – Sweepster 2012-04-12 20:05:48

+0

不客气:) – elxordi 2012-04-12 20:08:22

0

我认为你正在寻找一个在内部循环是这样的:

$sec++; 
if (($sec==60) { 
    $min++; 
    $sec=0 
    if (($min==60) { 
     $hr++; 
     $min=0; 
     if (($hr==25) { $hr=0; } 
    } 
} 
+0

秒必须为00格式。我怎样才能做到这一点? – Sweepster 2012-04-12 19:52:02

+0

使用printf或sprintf,如下所示: printf(“%2d%2d%2d”,$ sec,$ min,$ hr); – Leven 2012-04-12 19:56:39

0

你拥有的格式是UNIX域的日期,例如第一次约会:

gmdate('His', 0); # 000000 
gmdate('His', 60); # 000100 
gmdate('His', 3600); # 010000 

所以你可以传递秒数,gmdate函数会为你设置格式。