Entwickler-Ecke
Internet / Netzwerk - txt Datei von Server laden und auslesen ohne zu speichern
hitmiccs - Mo 29.12.08 18:59
Titel: txt Datei von Server laden und auslesen ohne zu speichern
Hallo Freunde,
ich hab ein mittlegroßes Problem mit dem laden und auslesen einer Textdatei von meinem Server. Folgendes will ich gerne verwirklichen:
- Datei wird geladen
- Datei wird NICHT auf der Festplatte des Benutzers zwischengespeichert sondern ->
- der Inhalt der Datei wird in eine Variable (?) geladen und dann wie eine echte Datei ausgelesen
Herunterladen tue ich die Datei derzeit mit URLDownloadToFile, was sie mir aber auf dem PC speichert. Da ich aber umgehen will, dass der Ablauf des Programms an irgendwelchen Schreibvorgängen hängt, wollte ich die Datei jetzt nur in den Speichern laden, ohne sie auf die HDD zu schreiben und dann weiter damit arbeiten.
Wie kann ich das machen?
Grüße,
hitmiccs
jaenicke - Mo 29.12.08 19:02
Nimm TIdHttp, als Parameter der Methode Get kannst du einen Stream angeben, in den das Ergebnis geschrieben werden soll, also z.B. einen TMemoryStream.
hitmiccs - Fr 02.01.09 02:56
Hallo und erstmal ein frohes Neues an alle hier!
Ich habe das mit dem Stream versucht, allerdings hatte ich vorher noch nie was mit Streams gemacht, so steh ich auch jetzt etwas auf dem Schlauch.
Ich habe den Inhalt der Txt-Datei nicht in einen Stream sondern per Http.Get in einen String geschrieben, also per
Quelltext
1: 2: 3:
| var str_variable: string;
str_variable := HTTP.Get('http://www.urlundsoweiter.de/list.txt'); |
Diese Txt-Datei enthält einige Zeilen mit Zeilenumbrüchen, die dann in dem String wie folgt dargestellt werden:
Eintrag1#$D#$AEintrag2#$D#$AEintrag3 und so weiter
Das dies die Steuercodes für Carriage Return und Line Feed sind, hab ich inzwischen rausgefunden. Was ich allerdings nicht rausgefunden habe, wenn ich den String verändert habe, will ich ihn auch wieder hochladen und die exisitierende Datei dabei überschreiben.
Mein String sieht also nach der Änderung wieder aus wie oben und hat den neuen Eintrag angehängt - jetzt will ich das ganze per
http://FTP.Put wieder hochschieben. Dabei brauche ich aber einen Stream, der den String beinhaltet.
Wie bekomme ich den String also in den Stream um ihn so hochladen zu können?
Ich habe versuch mit
Quelltext
1: 2: 3:
| str_stream: TStream
str_stream := str_stream.Create(str_variable) |
einen Stream zu erzeugen - das passiert auch scheinbar ohne Fehler, nur leider scheint im Stream nicht genau der String enthalten zu sein, da der neue String nicht so aussieht wie gewünscht.
Was mache ich falsch?
JayEff - Fr 02.01.09 03:06
3 Dinge:
a) du benutzt keine [
delphi][/delphi] tags.
b) nimm doch einen TStringStream
c) du musst der variable eine Instanz der klasse zuweisen, nicht sich selbst:
Delphi-Quelltext
1:
| aStream := TStringStream.Create('asd'); |
;)
edit: was genau heißt "nicht wie gewünscht" hier?
hitmiccs hat folgendes geschrieben : |
| nur leider scheint im Stream nicht genau der String enthalten zu sein, da der neue String nicht so aussieht wie gewünscht. |
Sollen die #$D#$A wieder eine neue zeile sein? Dafür hilft
Delphi-Quelltext
1:
| x := StringReplace(x, '#$D#$A', #13#10, [rfReplaceAll]); |
jaenicke - Fr 02.01.09 03:07
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var MyData: TMemoryStream; begin ... MyData := TMemoryStream.Create; HTTP.Get('http://www.urlundsoweiter.de/list.txt', MyData); MyData.Position := 0; ...
MyData.Free; |
Wo ist da das Problem? ;-)
Fehlerbehandlung usw. hab ich mal weggelassen.
Yogu - Sa 03.01.09 00:32
Wenn du noch nichts mit Streams gemacht hast, dann hilft dir vielleicht folgender Ansatz (basierend auf
jaenickes Code):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var MyData: TMemoryStream; FileAsStr: String; begin ... MyData := TMemoryStream.Create; try HTTP.Get('http://www.urlundsoweiter.de/list.txt', MyData); MyData.Position := 0;
SetLength(FileAsStr, MyData.Size);
MyData.Read(PChar(FileAsStr)^, Length(FileAsstr)); finally MyData.Free; end; end; |
Fehlerbehandlung usw. hab ich mal ansatzweise hinzugefügt ;)
hitmiccs - Sa 03.01.09 01:15
Okay, ich danke euch. Ich habe mit den Streams etwas gespielt und es hat dann funktioniert :) Kann geschlossen werden.
Gruß,
hitmiccs
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!