Hilfe bei Textfile Umsortierung via PHP benötigt

Anna1980

Grünschnabel
Laut der TU München darf ich die Daten nicht ins Internet stellen. Danke für eure Hilfe
 
Zuletzt bearbeitet:
Hi Anna,

da bieten sich eigentlich reguläre Ausdrücke an. Ich würde das in 2 Schritten machen. Erstmal konvertierst Du das Datum, da das wegen der führenden Nullen eine Callback-Funktion erfordert:

PHP:
$search = '/Start:[\s]+(\d+)\.(\d+)\.(\d+)[\s]+(\d+):(\d+)[\s]+/';
$str = preg_replace_callback($search, create_function('$matches', 'return "Start: " .  sprintf("%04d-%02d-%02d %02d:%02d\n",$matches[3], $matches[2], $matches[1], $matches[4], $matches[5]);'), $str);

Jetzt sieht der String so aus:

Code:
*snip*

Dann kannst Du mit einem weiteren Ausdruck die Datensätze konvertieren. Ich habe das Suchmuster der Übersicht halber mal in mehreren Schritten analog zu den Zeilen zusammengesetzt:

PHP:
$search = '/';
$search .= '(Wechselrichter:[\s]+([0-9]+)[\s]+';
$search .= 'Start:[\s]+(\d{4}-\d{2}-\d{2}[\s]+\d{2}:\d{2})[\s]+';
$search .= '.*P=(\d+).*Udc=(\d+).*Uac=(\d+).*Temp=(\d+).*dt=(\d+))';
$search .= '/';
$replace = 'Wechselrichter\2;\3;\4;\5;\6;\7;\8';
$str = preg_replace($search, $replace, $str);

Ergebnis:

Code:
*snip*

Funktioniert in der Form natürlich nur, wenn die Parameter auch genau so heißen. Andernfalls musst Du halt das Muster anpassen bzw. flexibler gestalten.
Den Unterschied beim dt-Parameter (6600 -> 660) habe ich mal ignoriert (Tippfehler?). Könntest Du aber wie auch das Datum über ein Callback umsetzen.

Zum Rumspielen gibt es einen Regexp-Evaluator im Netz. Dort findest Du auch ein kleines Tutorial zu regulären Ausdrücken.

LG
 
Zuletzt bearbeitet von einem Moderator:
Hi,

vielen Dank für die Antwort, ich habe mit Hilfe eines PHP Buches und viel Recherche soweit verstanden wie du das machst.

Allerdings ist mir nicht klar an welcher Stelle bzw. wie ich die .txt an das Script übergebe. Ich habe die Werte in einer seperaten Datei: test.txt


Vielen Dank noch einmal,

Anna
 
Hi Anna,

da in dem Beispiel der Inhalt der Variablen $str bearbeitet wird, müsstest Du ja nur den Inhalt Deiner Textdatei vorher in diese Variable einlesen. Das kannst Du z.B. mit [phpf]file_get_contents[/phpf] tun.

LG
 
Code:
$str = preg_replace_callback($search, create_function('$matches', 'return "Start: " .  sprintf("%04d-%02d-%02d %02d:%02d\n",$matches[3], $matches[2], $matches[1], $matches[4], $matches[5]);'), $str);

Da ist doch die Variable $str bereits vergeben (Einmal am Anfang "$str=" und am Ende der Zeile.

Wenn ich nun die Variable mit dem Inhalt der .txt befülle wird sie doch durch o.g. Zeile einfach wieder überschrieben?

Ansonsten vielen Dank für deine Mühe, du rettest mir echt das Leben, dachte schon ich müsste alles von Hand machen ^^

LG

Anna
 
Hi,

Wenn ich nun die Variable mit dem Inhalt der .txt befülle wird sie doch durch o.g. Zeile einfach wieder überschrieben?

Ja klar, das ist doch Sinn der Übung. Du möchtest den String doch transformieren. Fülle $str am Anfang mit dem Inhalt der Textdatei und schreibe hinterher das resultierende $str in eine Textdatei Deiner Wahl, die Du dann in die DB importieren kannst.

LG
 
Hey,

ich hab es kapiert :-D :-D Vieeeeeeeeeeelen Dank für deine Mühen mit mir! Kannst du mir noch eine Sache verraten? Wie schreibt man einen String wieder in eine .txt?

Geht das mit fwrite() oder bin ich da auf dem Holzweg

Viele liebe Grüße,

Anna
 
Zuletzt bearbeitet:
Laut der TU München darf ich die Daten nicht ins Internet stellen. Danke für eure HilfE
 
Zuletzt bearbeitet:
Hi,

Warum sieht jetzt Deine Datei plötzlich anders aus? Du musst bei sowas schon repräsentative Daten posten, sonst macht man sich die Mühe doch umsonst...

Ich erkenn nicht mal einen Unterschied zur ersten test Datei von meinem ersten Post.

Wie? Nicht? Also, ich schon. Wenn Du das Suchmuster verstanden hast, wirst Du sehen, dass das so natürlich nicht gehen kann. Das ist doch wohl ein Unterschied, ob diese Zeile mit den Parameterwerten genau einmal, oder beliebig oft vorkommen kann...

Versuche, Deinen ursprünglichen Denkansatz mit regulären Ausdrücken umzusetzen. In 2 Schritten ist das wohl nicht mehr getan.

LG
 

Neue Beiträge

Zurück