![]() |
Text aus Memo parsen
Guten Morgen :)
Ich hab vorhin im Netz eine Frage gelesen die ich recht interessant finde, bin jetzt auch nicht der Delphiprogrammierer muss ich dazu sagen, aber das ganze hat mich auf eine Idee gebracht die ich selber nutzen bzw. gebrauchen könnte. Es geht dabei grob gesagt um folgendes: Man hat ein Memo in dem man eine Art Ordner und Dateistruktur eingibt, welche dann per klick auf einen Button erstellt wird. Erstmal nichts wildes dachte ich soweit, dann hab ich es mal selber probiert aber dabei kam eine ganze Menge murks raus. Ich zeig mal welche Struktur das haben könnte: Basis Pfad z.B. C:\users\Adrenalin\Desktop\Test config.xml:enc /skins /data/defines.dat:blub /temp /app/styles/style.def:df :enc ist ein Inhalt der aus z.B. einen anderen Memo auf der Form kommt und in die Datei config.xml geschrieben wird bei dessen Erstellung. Das gleiche gilt für die Datei style.def Nun sollte man nachdem man einen Button auf der Form geklickt hat folgende Struktur auf dem Desktop vorhanden sein: [Inhalt Ordner Test] config.xml skins data | =>defines.dat temp app | |=>styles |====>style.def Also was mir erheblich Kopfschmerzen bereitet ist das die Struktur ja beliebig anlegbar ist von den Ordnern her sowie welche Datei in welchen Ordner muss. Da ich nicht viel mit Delphi mache hab ich mir dazu die Hilfe durchgelesen, mir vielen dann Sachen wie Pos, ForceDirectories und der gleiche ins Auge... Aber damit kam ich auch nicht wirklich weiter... Dann hat jemand noch ein Beispiel dazu gepostet wie man es machen kann. Das Problem dabei ist das es wohl fehlerhaft war, da nur Dateien (mit viel Glück) aber keine Ordner erstellt werden, Jetzt sitz ich hier seit Stunden rum um bekomme einfach nicht heraus wie man das richtig machen kann, dass eben genau das was man im Memo definiert hat, auch so auf der Festplatte landet... Hier mal der Code vom Posting vielleicht hat jemand Lust mal drüber zu sehen und findet ggf. den Fehler darin:
Delphi-Quellcode:
Wenn man obigen Code auf einen Button legt kommt folgendes dabei heraus was nicht wirklich richtig ist:
procedure ProcessLine(const BasePath : string; line: string);
var path, filename, data: string; colonPos: integer; begin colonPos := pos(':', line); if colonPos > 0 then begin data := copy(line, colonPos + 1); delete(line, colonPos, MAXINT); end; line := TPath.Combine(BasePath, normalizePath(line)); if ExtractFileExt(line) = '' then path := line else begin path := ExtractFilePath(line); filename := line; end; ForceDirectories(path); //ensure that the folder exists if filename <> '' then TFile.WriteAllText(filename, data); end; Basis Pfad enspricht: C:\Users\Adrenalin\Desktop\test Ordner test wird erstellt. Darin befindet sich die Datei config.xml Das wars auch schon :roll: Aufgerufen wurde das ganze über:
Delphi-Quellcode:
Was ich jetzt daran nicht verstehe ist:
procedure TForm1.Button3Click(Sender: TObject);
var I: Integer; begin for I := 0 to Memo1.Lines.Count -1 do begin ProcessLine(Edit1.Text, Memo1.Lines.Strings[I]); end; end; Wieso werden keine Ordner erstellt? Woher oder wie programmiert man das ganze so, das auch die richtige Datei im richtigen Ordner landet? Warum überhaupt so eine Struktur im Memo liegt hat der andere (finde Posting leider grad nicht) gut erklart wenn jemand gar keine Ahnung hat wie CSV Dateien oder vergleichbares aufgebaut werden müssen, ist die Eingabe der Ordnerstruktur so wie sie da jetzt im Memo vorliegt relativ einfach zu verstehen, den Grund fand ich plausibel. Viele Grüsse |
AW: Text aus Memo parsen
Wenn Du mit dem Debugger durchsteppst siehst Du was in Line entsteht ...
So funktioniert es ...
Delphi-Quellcode:
Function LegalPath(const s:String):String; begin Result := StringReplace(StringReplace(s,'/','\',[rfReplaceAll]),'\\','\',[rfReplaceAll]); end; procedure ProcessLine(const BasePath : string; line: string); var path, filename, data: string; colonPos: integer; begin colonPos := pos(':', line); if colonPos > 0 then begin data := copy(line, colonPos + 1); delete(line, colonPos, MAXINT); end; line := LegalPath(IncludeTrailingBackSlash(BasePath) + line); if ExtractFileExt(line) = '' then path := line else begin path := ExtractFilePath(line); filename := line; end; ForceDirectories(path); //ensure that the folder exists if filename <> '' then TFile.WriteAllText(filename, data); end; |
AW: Text aus Memo parsen
Zitat:
Aber verstanden hab ich den Fehler immer noch nicht so ganz, in welcher Zeile war der denn versteckt? Viele Grüsse |
AW: Text aus Memo parsen
Delphi-Quellcode:
einfach mal mit den Debugger durchsteppen und Dir die Inhalte anzeigen lassen ...
line := TPath.Combine(BasePath, normalizePath(line));
|
AW: Text aus Memo parsen
Zitat:
Nochmals vielen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz