OLE-Formatierten Text in TXT file speichern.

guenter024

Erfahrenes Mitglied
Hallo PHP-Freunde,

habe mal wieder ein Problem und hoffe jemand kann mir bei der Lösung helfen.
Zur Sachlage:
Ich habe eine Datenbank mit 4 Rows, welche der User wahlweise als txt, pdf, und csv file Downloaden kann. Die Datenbank-Einträge werden dabei aus einer OLE-formatierten csv-Datei importiert. Nun möchte ich nach der Formularübergabe die Datenbankeinträge in die gewünschten Formate schreiben, in ein zip-file verpacken und dann als Download freigeben, die files werden danach wieder gelöscht.
Problem ist eigentlich nur noch die Formatierung.
Ich habe mometan folgenden Standard-Code zum erstellen der TXT-Datei :
PHP:
# Diverser Code (Sicherheitsabfragen, Mysql-Verbindung etc.)
# Erstelle txt
$file = "tmp/".$row->Zeile1.".txt";
$filename = basename($file);

$handle = fopen($file,"w+");
fwrite($handle,
htmlspecialchars($row->Zeile1).
htmlspecialchars($row->Zeile2).
htmlspecialchars($row->Zeile3).
htmlspecialchars($row->OLE-Langtext));
fclose($handle);

# füge Datei zur ZIP hinzu ...

Die txt soll also die ersten 3 Datenbankeinträge je in eine Zeile schreiben, der 4. Datenbankeintrag besteht aus einem durch EXEL im OLE-formatierten Langtext, der aus mehrerern Zeilen besteht.

Hat jemand einen Lösungsansatz für mich, mit dem ich das bewerkstelligen könnte?

Danke im Voraus für Eure Hilfe und Bemühungen.

Ciao
Günter
 
Hi,

sorry, wenn ich das Problem nicht richtig formuliert habe.
Mit "Formatierung" meinte ich, das OLE-Format aus der csv-Datei bzw. Datenbank ins txt file zu übertragen.

Wenn ich nach dem genannten Code-Schema ins txt-file schreibe habe ich dort das ganze ja so stehen:

Zeile1Zeile2Zeile3OLE-LangtextWobei der OLE-Langtext aus vielen Zeilen besteht, die maximal 40 Zeichen betragen dürfen, im txt-File aber dann auch einfach aneinandergereiht sind.


In der txt soll es aber so stehen:
Zeile1
Zeile2
Zeile3

OLE-Langtext
Wobei der OLE-Langtext aus vielen
Zeilen besteht, die maximal 40 Zeichen
betragen dürfen, im txt-File aber dann
auch einfach aneinandergereiht sind.

Habe das Problem momentan so gelöst, das ich den Datenbankeintrag erst in eine textarea schreibe und das ganze dann komplett von dort in die Textdatei weitergebe.
Bin aber immer noch an einer "richtigen" Lösung, also direkt von der Datenbank ins txt-file schreiben, interessiert.

Ciao Günter
 
Das Problem ist, dass du keine Absätze/Newlines drin hast? Ganz einfach: \r\n steht für Carriage Return bzw. Newline, fängt also eine neue Zeile an und bringt den "Schreiber" nach vorne (stells dir vor wie bei ner Schreibmaschine - man muss erst drücken, damit das Ding, was die Buchstaben macht, nach unten geht, dann muss man es nach links schieben).
Also pack einfach überall in deinen String, wo du ne neue Zeile haben willst "\r\n" rein.
 
Okay, das hilft dir nichts für die Zeilenlänge von 40 Zeichen. Weiß nich, ob es dafür eine fertige Funktion gibt, aber kannst du dir einfach selber basteln:

substr kann dir einen Teil des Strings liefern, also könntest du so etwas machen:
PHP:
$ole_zeile1 = substr($row->OLE-Langtext, 0, 40); // Start: Zeichen 0; Länge: 40 Zeichen => Intervall [0;39]
$ole_zeile2 = substr($row->OLE-Langtext, 40, 40); // Start: Zeichen 40; Länge: 40 Zeichen => Intervall [40;79]
$ole_zeile3 = substr($row->OLE-Langtext, 80, 40); // Start: Zeichen 80; Länge: 40 Zeichen => Intervall [80;119]
$ole_zeile4 = substr($row->OLE-Langtext, 120, 40); // Start: Zeichen 120; Länge: 40 Zeichen => Intervall [120;159]
Das ganze machst du dann am besten nicht manuell, sondern lässt eine Schleife (while/for) das machen.
 
Hi,

das wäre ein Ansatz, aber wie gesagt, in der Datenbank steht es ja schon richtig.
Problem ist nur der direkte Weg von der DB in die txt. .
Da erscheint mir mein bisheriger Ansatz über das Formular doch einfacher und sauberer.

Gibt es vielleicht eine spezielle Funktion, welche die Multitext-Zeilenlängen in der Datenbank erkennt?
fgets() könnte ich mir vorstellen, ich bin aber mit den file-Funktionen noch nicht so vertraut.
 
fgets() ist nur für Dateien, aber du redest doch über eine MySQL-Datenbank, oder? Dann bringt dir das nichts. Es kann sein, dass htmlspecialchars deine Newlines entfernt, dürfte aber eigentlich nicht sein.
 
Zurück