AGB  ·  Datenschutz  ·  Impressum  







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

Kommentare aus einem CSS-Code löschen

Offene Frage von "torud"
Ein Thema von torud · begonnen am 7. Jul 2004 · letzter Beitrag vom 13. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Kommentare aus einem CSS-Code löschen

  Alt 7. Jul 2004, 21:23
Hallo Leute!

Ja ich schon wieder! Ich kann mich leider mit meiner function so gar nicht zufrieden stellen, da sie nur "halbherzig" das tut was ich will. Liegt wohl daran, was ich ihr so als Code für diese Aufgabe mitgegeben habe.

Ich übergebe der u.s. function ein TStrings, lösche alle Leerzeichen heraus und erhalte einen einzigen String, aus dem ich, damit ich ihn danach ordentlich parsen kann alle Kommentare löschen will.

Ein Kommentar sieht im CSS so aus:
Code:
/*Kommentar*/
Das Problem ist nun, dass ich diese function bei jedem OnChange meiner SynEdit aufrufe und wenn jemand einen Kommentar beginnt und nicht abschliesst und dann noch einen neuen beginnt, komme ich ins trudeln. Ich versuche mich zum ersten mal an einer "so grossen" Aufgabe und scheitere immer wieder an solchen Sachen.

Delphi-Quellcode:
function ClearCommentarTStrings(Inhalt:TStrings):String;
var
  i,beg_com,end_com:integer;
  myInhalt:string;
begin
  {hier wird ein string konstruiert, der ohne cf und cr
   auskommt, da es sich dann besser suchen lässt!?}

  for i:=0 to Inhalt.Count -1 do
    begin
       myInhalt:=myInhalt + Inhalt.Strings[i]
    end;
  myInhalt:=Trim(myInhalt);
  while (Pos('/*',myInhalt)) > -1 do
    begin
      beg_com:=Pos('/*',myInhalt);
      end_com:=Pos('*/',myInhalt);
      if beg_com > 0 then
        begin
          if end_com > 0 then
            begin
              delete(myInhalt,beg_com,end_com-beg_com+2);
            end
          else exit;
        end
      else
        begin
          Result:=myInhalt;
          ShowMessage(result);
          exit;
        end;
    end;
end;
Wer kann helfen???
Wie könnte ich die Fehler zählen und trotzdem die korrekten CSS-Kommentare löschen, damit ich dem User eine info geben kann???
Danke
Tom
  Mit Zitat antworten Zitat
lorenz

Registriert seit: 7. Nov 2003
86 Beiträge
 
Delphi 7 Personal
 
#2

Re: Kommentare aus einem CSS-Code löschen

  Alt 24. Sep 2004, 13:53
Hallo!
Also, ich bin jetzt gerade zufällig auf diese Nachricht gestoßen und hoffe, dass es noch nicht zu spät ist.
Ich würde das folgendermaßen machen:
-Ein Array mit einem Record aus einer Integerzahl und einem Booleanwert machen
-Alle Vorkommen von /* suchen und in das Array mit dem Booleanwert true eintragen
-Alle Vorkommen von */ suchen und in das Array mit dem Booleanwert false eintragen
-Das Array nach den Integerzahlen sortieren
-Überprüfen, ob zwei (oder mehr) true aufeinanderfolgen, wenn ja, werden alle bis auf das letzte Record gelöscht
-Überprüfen, ob zwei (oder mehr) false aufeinanderfolgen, wenn ja, werden alle bis auf das erste Record gelöscht
-Die Zahl der gelöschten wird zur Zahl der Fehler dazugezählt.
-Eine Schleife halb so oft, wie Einträge im Array, durchlaufen und immer von [0] bis [1], von [2] bis [3] usw. löschen.

Das Suchen kannst du mit der Funktion machen, die in diesem Thread suchen startpositionsuchen startposition steht.

Ich hoffe, ich konnte helfen.

Tschau, Lorenz
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Kommentare aus einem CSS-Code löschen

  Alt 25. Sep 2004, 03:15
Hallo Lorenz,

man so viele Infos auf einmal. also ich habe es mit einem anderen Code auch hinbekommen, aber meiner Meinung nach eher schlecht als recht, da ich irgendwie ab und zu den Verdacht habe, dass mich meine Prozedure ausbremst oder sogar das Programm lahm legt, bzw. den Fokus auf meiner SynEdit verliert, was beim Proggen echt nervig sein kann.

Da ich wohl Wochen brauche, um das zu realisieren, was Du da so schoen theoretisch geschildert hast, wurde ich dich bitten Die mal meinen Code anzusehen!?
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Kommentare aus einem CSS-Code löschen

  Alt 25. Sep 2004, 09:51
Zitat von torud:
Hallo Leute!
... lösche alle Leerzeichen heraus und erhalte einen einzigen String, aus dem ich, damit ich ihn danach ordentlich parsen kann alle Kommentare löschen will.
Bist du sicher, das du sowas machen willst?

Denn überleg mal, was du auf folgenter Struktur machst, wenn du wirklich alle leerzeichen löschst.
Code:
border-top:1px solid blue;
Als Empfehlung rate ich dir alle (Steuer)Zeichen, welche <= ' ' sind und wo davor und danach keine Zeichen, welche nicht zusammendürfen (z.B. a-z, A-Z, 0-9, _ und eventuell noch andere), sind.
$2B or not $2B
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#5

Re: Kommentare aus einem CSS-Code löschen

  Alt 25. Sep 2004, 10:54
Hast du schonmal dran gedacht, das mit einem netten regulären Ausdruck zu machen? Delphi bringt zwar soweit ich weiß keine Bibliothek dafür mit, aber bei Torry oder so findest du bestimmt eine. Das wäre auch einfacher, denn wenn ich mich nicht irre, gilt auch in CSS, dass Verschachtelungen nicht möglich sind:

/*
Kommentar
/*
Kommentar
*/
KEIN Kommentar
*/
KEIN Kommentar

Und damit würde ein einfacher regulärer Ausdruck à la '/\*(.|\n)*?\*/' (bzw. '/\*.*?\*/' im Singleline-Mode) ausreichen (getestet (c; ).
Auch das Parsen des CSS würde mit einem regulären Ausdruck etwas einfacher werden...

Im Übrigen würde ich nicht direkt im OnChange neu parsen, sondern im OnChange beispielsweise einen Timer mit minimalem Intervall starten (und zwar immer wieder, so dass beim neu tippen keine Probleme auftreten) und erst im Timer-Event neu parsen. Dann bekommst du nicht so'n Performance-Problem.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
lorenz

Registriert seit: 7. Nov 2003
86 Beiträge
 
Delphi 7 Personal
 
#6

Re: Kommentare aus einem CSS-Code löschen

  Alt 26. Sep 2004, 12:09
Hallo!
Wenn du schon einen Code hast, der nicht funktioniert, dann zeige ihn doch mal her. Vielleicht findet hier in der DP den Fehler. (Am Besten mit Kommentaren, was du als nächstes machst.)
Man liest sich,
Lorenz
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Kommentare aus einem CSS-Code löschen

  Alt 8. Okt 2004, 10:18
ok, und hier kommt mein code. ich hoffe, es ist einigermaßen durchschaubar.

Delphi-Quellcode:
function ClearCommentarTStrings(Inhalt:TStrings):String;
var
  i,beg_com,end_com:integer;
  myInhalt:string;
begin
  CommentCount:=0;
  for i:=0 to Inhalt.Count -1 do
    begin
       myInhalt:=myInhalt + Inhalt.Strings[i]
    end;
  myInhalt:=Trim(myInhalt);
  while (Pos('/*',myInhalt)) > -1 do
    begin
      beg_com:=Pos('/*',myInhalt);
      end_com:=Pos('*/',myInhalt);
      if beg_com > 0 then
        begin
          if end_com > 0 then
            begin
              CommentCount := CommentCount + 1;
              delete(myInhalt,beg_com,end_com-beg_com+2);
            end
          else
            begin
              Result:=myInhalt;
              exit;
            end;
        end
      else
        begin
          Result:=myInhalt;
          
          exit;
        end;
    end;
end;
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Kommentare aus einem CSS-Code löschen

  Alt 8. Okt 2004, 10:56
auf den 1. Blick scheint es ja zu laufen.

- also zum Ordnungsgemäßen verlaßen der Schleife hätte ich Break, statt Exit verwendet.
- "while (Pos('/*',myInhalt)) > -1 do" ist auch unnötig, da du ja schon innerhalb der Schleife die Kontrollen hast.
Ausserdem würde, wenn mal kein '/*' in dem CSS-Code drin ist kein String von deiner Funktion zurückgegeben, da du das ja nur innerhalb der Schleife machst und wenn die Schleife erst garnicht betreten wird, dann ist natürlich das Funktionsergebnis undefiniert
- am Anfang macht sich das Trim schon beim Zusammensetzten besser, da dieses ja nur die Zeichen am Anfang/Ende des Strings löscht und du demnach die Leerzeichen in den Zeilen dazwischen, welche ja fast immer am Zeilenanfang (die Einrückung) vorhanden sind, drinläßt.
- "if beg_com > 0 then" und "if end_com > 0 then" werkennt auch sowas "*/ ... /*", was aber kein Kommentar ist
und außerdem lassen sich diese Abfragen vereinen und somit ein Austrittspunkt einsparen
- die Leerzeichen ' ' werden wegen dem oben beschriebenem Problem eingefügt, weil ja bestimmte Zeichen nicht zusammen dürfen, weil es sonst Probleme gibt - nach der While-Schleife könnte man jetzt noch diese und die eh schon vorhanden und teilweise überflüssigen Leerzeigen entfernen
- "inc(CommentCount);" ist nur 'ne verkürzung von "CommentCount := CommentCount + 1;" (siehe Delphi-Referenz durchsucheninc)

Delphi-Quellcode:
function ClearCommentarTStrings(Inhalt:TStrings):String;
var
  i,beg_com,end_com:integer;
  myInhalt:string;
begin
  CommentCount:=0;
  for i:=0 to Inhalt.Count -1 do
    myInhalt:=myInhalt + ' ' + Trim(Inhalt.Strings[i]);
  while true do
    begin
      beg_com:=Pos('/*', myInhalt);
      end_com:=Pos('*/', myInhalt);
      if (beg_com > 0) and (end_com > beg_com) then
        begin
          inc(CommentCount);
          delete(myInhalt,beg_com,end_com-beg_com+2);
          insert(myInhalt,' ',beg_com);
        end
      else
        Break;
    end;
  Result:=myInhalt;
end;
$2B or not $2B
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#9

Re: Kommentare aus einem CSS-Code löschen

  Alt 8. Okt 2004, 15:11
hallöchen!

ich werde es heute abend mal testen und hoffe, dass dann die manmal auftretenden focusverluste auf meinem synedit weg sind!

vielen dank für den code und die erläuterungen!!!
Danke
Tom
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#10

Re: Kommentare aus einem CSS-Code löschen

  Alt 13. Okt 2004, 11:09
Hm, also leider bekomme ich eine Fehlermeldung in dieser Zeile:

  insert(myInhalt,' ',beg_com); Meldung:
Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden!

Was nun ???
Also, da ich anstelle des Komentares keine Leerzeichen benötige, habe ich erstmal, bis auf Wideruf, den InsertCode gelöscht.
Danke
Tom
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:03 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