Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inhalt der pref.js Dateien ändern (https://www.delphipraxis.net/4313-inhalt-der-pref-javascript-dateien-aendern.html)

eleonora 24. Apr 2003 07:29


Inhalt der pref.js Dateien ändern
 
Hallo!

Ich würde gerne einen bestimmten Eintrag in einer pref.js (bei Netscape) Datei, die ich mit einem Texteditor öffne, mit Delphi ändern!

Beispiel: Autocomplete von true auf false ändern!

Gibt es eine Möglichkeit oder einen Code, mit dem ich diese Einträge ändern kann?

Danke schon mal im voraus!

Gruss Eleonora

Stanlay Hanks 24. Apr 2003 08:18

Hallo. Da ich keine Ahnung habe, wie so eine Datei aufgebaut ist, würde ich sagen, du lädst die date, suchst mit pos() die Position des Eintrags
Autocomplete gehst von dieser Position 12 Zeichen (Die länge des Wortes autocomplete)weiter und ersetzt dann false durch true. So würd ich das machen aber: 1) Da ich es noch nie versucht habe, kann ich nicht
garantieren, dass es funzt.
2) Hat bestimmt irgendwer ne schönere Lösung anzubieten.

Man liest sich. Stanlay :spin:

MrSpock 24. Apr 2003 09:07

Hallo eleonora,

da es sich bei .js (JavaScript) Dateien um Textdateien handelt, kannst du sie wie andere Textdateien bearbeiten. Du kannst sie z.B. in ein Memo laden, dort bearbeiten (zeilenweise durchlaufen und z.B. mit Pos den zu änderenden String suchen und ersetzen) und wieder abspeichern.

eleonora 24. Apr 2003 12:55

@MrSpock

Kannst Du mir mal einen kleinen Tip zu Pos geben, denn ich habe damit noch gar nicht gearbeitet und das was ich im Formum finde bringt mich irgendwie nur noch mehr durcheinander! Aber ich werde es solange trotzdem weiter versuchen!

Danke!

eleonora

MrSpock 24. Apr 2003 13:03

Hallo eleonora,

wenn du die Textdatei in ein Memo geladen hast:

Delphi-Quellcode:
var
  posi : Integer;
...
for i:= 0 to memo.lines.count-1 do
begin
  { suchStr enthalte den zu suchenden String }
  posi := Pos(suchStr, memo.lines.Strings[i]);
  { posi zeigt nach dieser Anweisung auf das erste Vorkommen
    des suchStr in der durchsuchten Zeile, oder hat den Wert 0 }
  if posi > 0 then
  begin
    { in memo.lines.Strings[i] steht ab der Position posi der
      zu suchende String }
    { Wert des Strings ändern }
  end
end;

MathiasSimmack 24. Apr 2003 13:15

Liste der Anhänge anzeigen (Anzahl: 1)
Ich hatte damals das selbe Problem. Die Version 0.9x des Mozilla besaß zwar schon den Popup-Blocker, hatte in den Einstellungen aber noch keine Option dafür. Ergebnis war mozillum: ein Mini-Tool, das den notwendigen Eintrag selbst in die "prefs.js" geschrieben hat.

Wenn´s dich interessiert, kannst du den Programmcode als Basis nutzen, @eleonora. Das Prinzip ist in deinem Fall ähnlich. Hab´s mal rausgesucht und angehangen.

eleonora 24. Apr 2003 14:16

Danke Euch beiden für Eure schnelle Hilfe! :)

Leider hab ich grad keine Zeit mir das alles genau anzuschauen! Drumm werdet ihr wahrscheinlich erst morgen eine Antwort von mir bekommen!

Sorry! :(

Gruss Eleonora :coder:

eleonora 25. Apr 2003 11:25

Hallo!

Ich habe mich jetzt erst mal mit dem Code von MrSpock auseinander gesetzt! Er funktioniert bei mir allerdings nicht! Vielleicht kann mir ja einer sagen warum?

Hier ist mal mein Code den ich eingefügt habe!

Code:
procedure Teraser_memo.Button1Click(Sender: TObject);
var
posi : integer;
i : integer;
s : string;
begin
     for i := 0 to Memo.Lines.count-1 do
     begin
     if OpenDailog.Execute
     then begin
          Memo.Lines.LoadFromFile(OpenDialog.FileName);
          posi := Pos('pref("browser.urlbar.autocomplete.enabled"),
          false','Memo.lines.strings[i]');
          ShowMessage(Memo.lines.strings[posi]);
     end;
end;
Wenn ich das Programm starte, dann lädt er mir die Datei zwar ins Memofeld. Nur hab ich das Problem, dass er mir die angegebene Position nicht ausgibt und anschliessend abstürzt.

@MatthiasSimmack: Für Deinen Code hatte ich noch keine Zeit um ihn mir genau anzuschauen. Allerdings bin ich in Mozilla auch noch nach was anderem auf der Suche und wollte Dich dazu mal was fragen! Darf ich Dir ne mail schicken, oder soll ich es hier rein posten? Allerdings hat es "nichts" mit Delphi zu tun!!!

Gruss Eleonora

MrSpock 25. Apr 2003 12:03

Hallo eleonora,

du hast ja auch das Öffnen der Datei mit in die Schleife gepackt. Count ist dann natürlich auch noch nicht korrekt.

Es muss so aussehen:

Delphi-Quellcode:
if OpenDailog.Execute then
begin
  Memo.Lines.LoadFromFile(OpenDialog.FileName);
  for i := 0 to Memo.Lines.count-1 do
  begin
     posi := Pos('pref("browser.urlbar.autocomplete.enabled"),
          false','Memo.lines.strings[i]');
     { show Message musss hier mit Index i und nicht mit posi aufgerufen werden"! }
     ShowMessage(Memo.lines.strings[i]);
  end;
end;

eleonora 25. Apr 2003 12:12

Hallo!

:oops: Die Schleife habe ich ausversehen falsch rüber kopiert. :oops:

Ich habe aber auch schon das posi durch das i ersetzt! Wenn ich das dann mache, dann geht er mir das ganze Memo Zeile für Zeile durch! Und wenn ich das richtig verstanden habe, dann soll er mir ja gleich diesen Eintrag raussuchen!?

Eleonora

MrSpock 25. Apr 2003 12:15

Hallo eleonora,

nein, er soll tatsächlich Zeile für Zeile das Memo durchlaufen und zeigt dir dann das erste Vorkommen des Suchstrings in der ZEILE.

mbse 25. Apr 2003 12:17

Wenn nur der Text ersetzt werden soll, geht auch folgendes

Delphi-Quellcode:
    if OpenDialog.Execute then
   begin
      Memo.Lines.LoadFromFile(OpenDialog.FileName);
        Memo.Lines.Text := AnsiReplaceStr(Memo.Lines.Text, 'pref("browser.urlbar.autoFill", true)', 'pref("browser.urlbar.autoFill", false)');
        Memo.Lines.SaveToFile(OpenDialog.FileName);
    end;

eleonora 25. Apr 2003 14:00

@mbse: Kann es sein das es AnsiReplaceStr gar nicht mehr gibt? Denn ich kann sie in meiner Delphi Version nicht finden!

Ich habe mitlerweile einen anderen Weg gefunden um mir diese Zeile anzeigen zu lassen! Es mag zwar nicht die beste sein, aber es funktioniert!

Code:
procedure Teraser_memo.ButtonClick(Sender: TObject);
var
posi : integer;
i : integer;
s : string;
begin
if OpenDialog.Execute
then begin
          Memo.Lines.LoadFromFile(OpenDialog.FileName);

          for i := 0 to OpenDialog.Lines.count-1 do
          begin
               if Memo.lines[i= 'pref"browser.urlbar.autocomplete.enabled", false);' then
               begin
                    Memo.lines[i] := 'pref ("browser.urlbar.autocomplete.enabled", true);';
               end;
          end;
     end;
end;
Wenn jemandem doch noch etwas besseres einfallen sollte dann kann er es ja rein posten!


@MrSpock: Irgendwie funktioniert das ganze nicht, drum hab ich jetzt mal fürs erste den oberen Code genommen! Er ist mir bei Deinem einfach nicht in die entsprechende Zeile gesprungen!

Danke noch mal für Eure Hilfe!!! :)

Eleonora

mbse 25. Apr 2003 14:17

Ich glaube die Funktion AnsiReplaceStr wurde mit Delphi 6 eingeführt.

Auszug aus der Hilfe...

Zitat:

Unit

StrUtils

Kategorie

Stringverarbeitung

function AnsiReplaceStr(const AText, AFromText, AToText: string
): string;

Beschreibung

Mit AnsiReplaceStr können Sie den String AText analysieren und alle Fundstellen des Strings AFromText durch den String AToText ersetzen. Fundstellen von AFromText werden unter Berücksichtigung der Groß-/Kleinschreibung gesucht. Die Suche erfolgt nicht rekursiv: Wenn die Ersetzung durch AToText zu einer neuen Fundstelle von AFromText führt, wird diese Fundstelle nicht ersetzt.

eleonora 25. Apr 2003 14:48

Na dann weiss ich ja jetzt den Grund, denn ich habe Delphi 5!

Trotzdem Danke!!! :)

eleonora

MrSpock 27. Apr 2003 20:00

Hallo eleonora,

wenn der Code funktioniert, fresse ich einen Besen :mrgreen: .

Delphi-Quellcode:
for i := 0 to OpenDialog.Lines.count-1 do ...
OpenDialog.Lines gibt's doch gar nicht.

Es ist aber korrekt, das der von mir gepostete Code nicht an die Stelle im Memo gesprungen ist, an dem die Zeichenreihe gefunden wurde. Er hat nur die Zeile ausgegeben, in der der Suchstring erhalten war.

eleonora 28. Apr 2003 12:56

:oops: Ich habs wohl am Freitag nicht so mit dem Schreiben gehabt!

Es müsste eigentlich SaveDialog heissen :oops: :oops:

Sorry, aber wie schon gesagt, wir hatten Freitag!

Danke!

eleonora


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 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