css-Datei in String kopieren
css-Datei in String kopieren
Hallo,
ich möchte den Text einer css-Datei manipulieren. Genauer gesagt, möchte ich einen ganzen Textabschnitt mit einem anderen Textabschnitt ersetzen. Ich mache das mit POS, COPY, DELETE und INSERT. Solange es sich um normalen Text handelt, funktioniert das auch ganz gut, aber Zeilenumbrüche und die geschweifte Klammer machen mir Probleme. Einen Textabschnitt mit einem Zeilenumbruch kann ich beispielsweise nicht in einen String kopieren.
Ich wäre sehr dankbar, wenn mir jemand sagen würde, wie ich das vielleicht trotzdem hinbekommen könnte.
ich möchte den Text einer css-Datei manipulieren. Genauer gesagt, möchte ich einen ganzen Textabschnitt mit einem anderen Textabschnitt ersetzen. Ich mache das mit POS, COPY, DELETE und INSERT. Solange es sich um normalen Text handelt, funktioniert das auch ganz gut, aber Zeilenumbrüche und die geschweifte Klammer machen mir Probleme. Einen Textabschnitt mit einem Zeilenumbruch kann ich beispielsweise nicht in einen String kopieren.
Ich wäre sehr dankbar, wenn mir jemand sagen würde, wie ich das vielleicht trotzdem hinbekommen könnte.
Re: css-Datei in String kopieren
Was ist denn das Problem? Wieso solle man keinen Zeilenumbruch (#13#10, oder #13, oder #10, je nach Betriebssystem - oder allgemein LineEnding als Konstante) nicht in einen anderen String einfügen können? Und was ist das Problem mit der geschweiften Klammer? Wenn sie schön in Anführungszeichen steht, kann sie vom Compiler nicht als Kommentarzeichen missverstanden werden.
Re: css-Datei in String kopieren
Vielen Dank,
ich möchte die Stelle finden, an der folgendes steht:
a {
color: #08c;
Das habe ich jetzt so versucht:
Aber das Programm findet die Stelle nicht, auch wenn ich die 2. Zeile weglasse. Wenn ich die geschweifte Klammer in Anführungszeichen setze, wird die Stelle nicht gefunden, und wenn ich die Anführungszeichen weglasse, meldet Lazarus einen Fehler.
ich möchte die Stelle finden, an der folgendes steht:
a {
color: #08c;
Das habe ich jetzt so versucht:
Code: Alles auswählen
procedure TFormHaupt.Button1Click(Sender: TObject);
var
t : TStringList;
X, Y : String;
i, j : Integer;
begin
if FileExists('template.css') then
begin
t := TStringList.Create;
t.LoadFromFile('template.css');
X := t.Text;
i := POS('a "{"',X);
Label1.Caption:='Position: ' +IntToStr(i);
end;
end;
Re: css-Datei in String kopieren
Wieso das denn und welchen Fehler?Andromeda hat geschrieben: und wenn ich die Anführungszeichen weglasse, meldet Lazarus einen Fehler.
Re: css-Datei in String kopieren
Wieso geht das nicht? Ich meinte natürlich die einfachen Anführungszeichen, mit denen man einen String kennzeichnet. Falls mit diesem Code die Stelle nicht gefunden wird, ist vielleicht kein oder mehrere Leerzeichen oder ein Tabulator (#9) zwischen "a" und "{" (wobei letzterer Fall hier auch geprüft wird - aber es gibt sehr viele Möglichkeiten, in diesem Fall musst du dir etwas anderes überlegen...):
Code: Alles auswählen
procedure TFormHaupt.Button1Click(Sender: TObject);
var
t : TStringList;
X, Y : String;
i, j : Integer;
begin
if FileExists('template.css') then
begin
t := TStringList.Create;
t.LoadFromFile('template.css');
X := t.Text;
i := POS('a {',X); // ohne die doppelten Anführungszeichen!
if i = 0 then i := POS('a'#9'{', X); // Tabulator statt Leerzeichen?
Label1.Caption:='Position: ' +IntToStr(i);
end;
end;
Re: css-Datei in String kopieren
Gibt es vielleicht eine Möglichkeit, womit ich die unsichtbaren Zeichen (Leerzeichen, Zeilenumbrüche usw.) sichtbar machen kann?
Möglicherweise auch außerhalb von Lazarus. Nur damit ich mal sehen kann, was da noch so alles verborgenes drin steht.
Möglicherweise auch außerhalb von Lazarus. Nur damit ich mal sehen kann, was da noch so alles verborgenes drin steht.
Re: css-Datei in String kopieren
In Lazarus: Rechtsklick auf Editor --> "Einstellungen" --> "Editor" --> "Allgemein" --> "Verschiedenes" --> Rechts oben "Sonderzeichen anzeigen"
Re: css-Datei in String kopieren
Ich nutze unter Debian den Bless HexEditor. Unter Windows wird als Vergleichbares geben.
Ein HexEditor bietet sich nicht nur für Textdateien, sondern auch für Binärdateien an.
Ein HexEditor bietet sich nicht nur für Textdateien, sondern auch für Binärdateien an.
Re: css-Datei in String kopieren
Verstehe was du meinst... aber das ist eher ein schwieriges Unterfangen. Prinzipiell ist Pos gut. Doch du hast nie die Garantie wie die CSS Datei wirklich aussieht. Nach dem "a" und dem "{" gibt es zig Möglichkeiten: Eine oder mehrere Leerzeichen, eine oder mehrere Zeilenumbrüchee, Einrückungen, usw. Das wird mit einer einzelnen Pos nicht möglich sein.
Entweder du durchläufst das alles Zeichen für Zeichen (evtl. kombiniert mit Pos). Oder, und das würde ich dir eher raten, ist die Nutzung von Regulären Ausdrücken.
Eine weitere Idee ist, dass du vor dem Suchen versucht die CSS selbst zu formatieren - aber auch das ist eher eine Unsichere Variante.
Wenn die CSS Datei immer gleich ist und du weißt wo du was austauschen willst, dann kannst du auch - ganz ungeachtet was dort steht - den Text oder die Zeilen austauschen.
LG
Entweder du durchläufst das alles Zeichen für Zeichen (evtl. kombiniert mit Pos). Oder, und das würde ich dir eher raten, ist die Nutzung von Regulären Ausdrücken.
Eine weitere Idee ist, dass du vor dem Suchen versucht die CSS selbst zu formatieren - aber auch das ist eher eine Unsichere Variante.
Wenn die CSS Datei immer gleich ist und du weißt wo du was austauschen willst, dann kannst du auch - ganz ungeachtet was dort steht - den Text oder die Zeilen austauschen.
LG
Re: css-Datei in String kopieren
Und was heißt das bitte?Epcop hat geschrieben: Oder, und das würde ich dir eher raten, ist die Nutzung von Regulären Ausdrücken.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: css-Datei in String kopieren
Hier findest du allgemeine Informationen zu dem ThemaAndromeda hat geschrieben:Und was heißt das bitte?Epcop hat geschrieben: Oder, und das würde ich dir eher raten, ist die Nutzung von Regulären Ausdrücken.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
- af0815
- Lazarusforum e. V.
- Beiträge: 6782
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: css-Datei in String kopieren
Google sagt dazu: https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck und http://wiki.freepascal.org/Regexpr/deAndromeda hat geschrieben:Und was heißt das bitte?Epcop hat geschrieben: Oder, und das würde ich dir eher raten, ist die Nutzung von Regulären Ausdrücken.
Siehe auch fpc Sourcen, package/regexpr und dort examples
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: css-Datei in String kopieren
Ich hatte mir mal dafür ein Parser geschrieben. Zugegeben, der wurde nie 100% Fertig, aber einfache CSS Dateien konnte ich damit schon einlesen oder sagen wir einfach: Die hälfte der CSS Möglichkeiten konnte ich bereits "Parsen".
Ich denke, dir wird nichts anderes übrig bleiben, als eine EIGENE Datenstruktur zu erstellen und einen Parser zu schreiben.
Das klingt aufwendig, aber so schwer ist CSS auch wieder nicht, auch wenn es viel Ausnahmen gibt und Sachen die zu beachten sind z.b. parsen verschiedene Browser CSS Dateien auf ihre art und weise.
Wenn ich meine letzte Version wieder finden sollte, kann ich sie ja mal hochladen.
Du könntest dir mal das HTML Panel anschauen, der CSS Parser dort ist noch einfacher gehalten. Zeig aber sehr gut, wie sowas gehen könnte, auch wenn man diesen Weg vielleicht nicht gehen möchte.
Ich denke, dir wird nichts anderes übrig bleiben, als eine EIGENE Datenstruktur zu erstellen und einen Parser zu schreiben.
Das klingt aufwendig, aber so schwer ist CSS auch wieder nicht, auch wenn es viel Ausnahmen gibt und Sachen die zu beachten sind z.b. parsen verschiedene Browser CSS Dateien auf ihre art und weise.
Wenn ich meine letzte Version wieder finden sollte, kann ich sie ja mal hochladen.
Du könntest dir mal das HTML Panel anschauen, der CSS Parser dort ist noch einfacher gehalten. Zeig aber sehr gut, wie sowas gehen könnte, auch wenn man diesen Weg vielleicht nicht gehen möchte.
MFG
Michael Springwald
Michael Springwald
Re: css-Datei in String kopieren
Wenn man es noch einfach halten will:
Mit pos nach "a" suchen, danach das erste { und dann das nächste } . Und dann hat man eigentlich schon den Bereich.
Nur bei "a" muss man dann auch noch aufpassen. Bin nicht ganz so Fit in CSS. Aber da gäbe es ja auch noch a:link a:visit #a .a usw. Da müsste man evtl. noch differenzieren und extra prüfungen machen. Wenn es aber eine kleine überschaubere CSS ist, wäre das eine einfache Option.
Mit pos nach "a" suchen, danach das erste { und dann das nächste } . Und dann hat man eigentlich schon den Bereich.
Nur bei "a" muss man dann auch noch aufpassen. Bin nicht ganz so Fit in CSS. Aber da gäbe es ja auch noch a:link a:visit #a .a usw. Da müsste man evtl. noch differenzieren und extra prüfungen machen. Wenn es aber eine kleine überschaubere CSS ist, wäre das eine einfache Option.
Re: css-Datei in String kopieren
Vielen Dank an Alle,
dass das Ganze am Anfang nicht so richtig funktioniert hat, liegt nur daran, dass ich mich zu doof angestellt habe. Inzwischen klappt das mit POS, COPY usw. recht gut. Ich taste mich in drei Stufen an die gesuchte Stelle heran. Mit dem Programm möchte ich die Farben in der template.css austauschen. Es handelt sich um das Joomla-Template Protostar. Die Schwierigkeit liegt darin, dass die Datei über 7.000 Zeilen lang ist und die Farben manchmal 3-stellig und manchmal 6-stellig eingetragen sind. Außerdem gibt es ständig Updates, so dass man sich auch nicht auf die Zeilennummern verlassen kann. Aber jetzt funktioniert das Ganze im Prinzip und alles Weitere ist nur noch Fleißarbeit.
dass das Ganze am Anfang nicht so richtig funktioniert hat, liegt nur daran, dass ich mich zu doof angestellt habe. Inzwischen klappt das mit POS, COPY usw. recht gut. Ich taste mich in drei Stufen an die gesuchte Stelle heran. Mit dem Programm möchte ich die Farben in der template.css austauschen. Es handelt sich um das Joomla-Template Protostar. Die Schwierigkeit liegt darin, dass die Datei über 7.000 Zeilen lang ist und die Farben manchmal 3-stellig und manchmal 6-stellig eingetragen sind. Außerdem gibt es ständig Updates, so dass man sich auch nicht auf die Zeilennummern verlassen kann. Aber jetzt funktioniert das Ganze im Prinzip und alles Weitere ist nur noch Fleißarbeit.