AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Text aus Memo parsen

Ein Thema von Adrenalin · begonnen am 8. Sep 2012 · letzter Beitrag vom 8. Sep 2012
Antwort Antwort
Adrenalin

Registriert seit: 8. Sep 2012
16 Beiträge
 
#1

Text aus Memo parsen

  Alt 8. Sep 2012, 07:34
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:
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;
Wenn man obigen Code auf einen Button legt kommt folgendes dabei heraus was nicht wirklich richtig ist:

Basis Pfad enspricht: C:\Users\Adrenalin\Desktop\test
Ordner test wird erstellt.
Darin befindet sich die Datei config.xml

Das wars auch schon

Aufgerufen wurde das ganze über:

Delphi-Quellcode:
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;
Was ich jetzt daran nicht verstehe ist:
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
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Text aus Memo parsen

  Alt 8. Sep 2012, 08:40
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Adrenalin

Registriert seit: 8. Sep 2012
16 Beiträge
 
#3

AW: Text aus Memo parsen

  Alt 8. Sep 2012, 08:51
Wenn Du mit dem Debugger durchsteppst siehst Du was in Line entsteht ...

So funktioniert es ...
Der Wahnsinn! Vielen Vielen Dank!!
Aber verstanden hab ich den Fehler immer noch nicht so ganz, in welcher Zeile war der denn versteckt?

Viele Grüsse
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Text aus Memo parsen

  Alt 8. Sep 2012, 09:43
line := TPath.Combine(BasePath, normalizePath(line)); einfach mal mit den Debugger durchsteppen und Dir die Inhalte anzeigen lassen ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Adrenalin

Registriert seit: 8. Sep 2012
16 Beiträge
 
#5

AW: Text aus Memo parsen

  Alt 8. Sep 2012, 09:46
line := TPath.Combine(BasePath, normalizePath(line)); einfach mal mit den Debugger durchsteppen und Dir die Inhalte anzeigen lassen ...
Grad gemacht! Kein Wunder wieso das nicht klappte, dass sieht ja mal völlig entgegengesetzt zu dem aus was bei Dir nun drin steht...

Nochmals vielen Dank!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz