2012-04-12 9 views
1

Ich habe den folgenden Code mit liest eine TXT-Datei, zieht nicht benötigte Informationen aus jeder Zeile und speichert dann die bearbeiteten Zeilen in einer neuen TXT-Datei.PHP für jede Zeile in TXT, Wert der Variablen erhöhen?

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

Ich möchte jetzt $ hr #min und $ sec Variablen einfügen, die jedes Mal um 1 Sekunde erhöht wird, wenn eine neue Zeile gespeichert wird. Lassen Sie uns sagen, dass meine Zeilen wie dieser (alten Code) lesen:

958588 
978567 
986766 

ich meinen neuen Code wie folgt aussehen wollen:

125959958588 
130000978567 
130001986766 

Wie Sie sehen können, ist die Stunde in 24-Stunden-Format (00 - 23), gefolgt von Minuten (00 - 59) und Sekunden (00 - 59) mit dem extrahierten txt am Ende.

Ich habe das variable Framework festgelegt, aber ich weiß nicht, wie man die Vriables richtig inkrementieren kann. Kann jemand helfen?

<?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

In welcher Zeit der Zeitzähler starten muss? – elxordi

+0

das schreit aus - verwenden Sie eine Datenbank, keine flache Datei. –

+0

Ich kann keine Datenbank verwenden, ich muss die Datei analysieren – Sweepster

Antwort

1

würde ich mich viel einfacher:

<?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

Das hat es geschafft! Vielen Dank! – Sweepster

+0

Gern geschehen :) – elxordi

0

Ich glaube, du bist für so etwas wie dies in der inneren Schleife suchen:

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

Die Sekunden müssen im 00 Format sein. Wie kann ich das machen? – Sweepster

+0

Verwenden Sie printf oder sprintf, wie folgt: printf ("% 2d% 2d% 2d", $ sek, $ min, $ hr); – Leven

0

Das Format, das Sie haben, ist von einem Datum in der UNIX-Domäne, zum Beispiel das erste Datum:

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

So können Sie einfach die Anzahl der Sekunden übergeben und die gmdate-Funktion wird es für Sie formatieren.