Suchen Ersetzen per Report

9. Oktober 2007 18:25

Hallo,

ich möchte per Report einen Text in einer Tabelle ändern, jedoch nur einen Teil. Dieser Teil steht mitten im Text. Der Text ist genauer gesagt ein Pfad über welchen man aus einem Form (Artikelkarte) ein PDF aufrufen kann. Funktioniert prima !
Jedoch ändern sich jetzt Ordner des Pfades und ich möchte die alte gegen die neue Ordnerbezeichnung austauschen.

Bsp:
Alter Pfad
file:\\ftp-server\ordner_X\ordner_Y\4711.pdf

Neuer Pfad
file:\\ftp-server\ordner_X\ordner_Z\4711.pdf

Die Feldlänge von ordner_Y ist hierbei variabel.

Würde mich über ein Feedback freuen !

Gruß
marcus73

10. Oktober 2007 00:04

Hallo Marcus,

also zunächst über den ObjectDesigner einen neuen Report erstellen. Die Tabelle die den Text enthält als DataItem anlegen.

Im OnPreDataItem-Trigger den folgenden Code angeben:

Code:
SearchString:='file:\\ftp-server\ordner_X\ordner_Y';
ReplaceString:='file:\\ftp-server\ordner_X\ordner_Z';

Im OnAfterGetRecord-Trigger den folgenden Code angeben:

Code:
IF STRPOS(Textfeld SearchString) > 0 THEN BEGIN
  Textfeld:=
    COPYSTR(Textfeld, 1, STRPOS(Textfeld, SearchString)-1)+ReplaceString+
    COPYSTR(Textfeld, STRPOS(Textfeld, SearchString) + STRLEN(SearchString));
  MODIFY;
END;

SearchString und ReplaceString sind zwei globale Variablen vom Typ Text.

Viele Grüße, Marc

10. Oktober 2007 00:07

öffne die Tabelle, gehe in das Feld, Drücke Strg-H dann gib oben ordner_Y ein, darunter ordner_Z, achte darauf, dass die Option "Teil des Feldinhaltes suchen" ausgewählt und das Häkchen bei "ganzes Feld ersetzen" NICHT gesetzt ist, und dann auf alle ersetzen klicken, e voila

oder gibt es Suchen und ersetzen in Nav 2 noch nicht?

10. Oktober 2007 08:42

Danke für das schnelle Feedback ! Und erst einmal Lob für das Forum !!!

Beides hatte ich zuvor schon probiert, jedoch stolper ich hier an einer Tatsache. Ich glaube das habe ich noch nicht richtig erklärt...
Hierzu noch einmal mein Bsp.:

Alter Pfad
file:\\ftp-server\ordner_X\ordner_Y\4711.pdf

Neuer Pfad
file:\\ftp-server\ordner_X\ordner_Z\4711.pdf

Die Nr. "4711" steht für hunderte verschiedener PDF's. D.h. diesen Teil des Pfads darf ich nicht ändern. Die Länge der Nummer ist hierbei variable. Ich müsste also nicht den kompletten Pfad ersetzen, sondern nur einen Teil bzw. nur den Ordner_Z.
Hoffe mein Problem ist besser rüber gekommen.

Grüße aus Wuppertal,
Marcus

10. Oktober 2007 09:57

Und was soll nicht klappen an den beiden genannten Beispielen von Michael und mir.

Gruß, Marc

10. Oktober 2007 09:59

Du hast Strg-H (Suchen und Ersetzen) schon probiert?
Hast Du dabei auf die von mir erwähnten Einstellungen geachtet?
Wie gesagt, ich habe kein NAV2, daher weiß ich leider nicht, ob es das dort auch gibt.....

10. Oktober 2007 13:21

Habe es jetzt noch einmal mit Strg-H versucht und siehe da es geht. Allerdings gibt es hier ein Problem bei der Funktion, worüber ich vorher gestolpert bin und den Ansatz verwrfen hatte.
Wenn man mit dem Cursor in dem zu ändernden Feld (Pfad) steht, wird der Inhalt in das Suchen/Ersetzen-Fenster in das Feld "Suche nach" übernommen. Ich habe jetzt nur den letzten Teil entfernt (4711.pdf), jedoch wird das Feld "Ersetzen mit" nun inaktiv und man kann hier nichts mehr eintragen.

Wenn man allerdings den Vorschlagswert komplett entfernt und hier einen Wert manuell eingibt, funktioniert es.

Sieht mir nach einem Bug aus.
Danke für Euer Feedback !

Gruß
Marcus

Re: Suchen Ersetzen per Report

16. Dezember 2008 20:52

Hallo,

ich habe hier ein ähnliches Problem. Ich möchte in einer Tabelle, die wir zum Verwalten von personalisierten Filtern verwenden die Strings anpassen. Hintergrund: Wir haben von der nativen auf eine SQL DB umgestellt. Das Feld in der Tabelle die gefiltert wird ist ein Code-Feld. In einer SQL Datenbank wird hier der Feldtyp Code wie ein Varchar verwendet und sortiert die Werte anders. Wir haben als Lösungsansatz ein weiteres Feld mit dem Typ TEXT hinzugefügt, die Werte von dem Codefeld übernommen und "Führende" Nullen vorangestellt. Außerdem natürlich einen neuen Schlüssel generiert. Nun müssen wir die vorhanden Filterstrings anpassen. Ein String könnte wie folgt aussehen:

Vorher:
Code:
100|300..500|700..1000


Nachher
Code:
00100|00300..00500|00700..01000


Mein zaghafter Ansatz sieht wie folgt aus:

Code:
IF "XYUser Role"."Dimension 1 Filter" <> '' THEN
BEGIN

  searchstring1 := '|';
  searchstring2 := '..';


IF STRPOS("Dimension 1 Filter",searchstring1) > 0 THEN
BEGIN
  oldstring := COPYSTR("Dimension 1 Filter",1,STRPOS("Dimension 1 Filter",searchstring1)-1);
  MESSAGE(oldstring);

  newstring := COPYSTR(oldstring,1,STRPOS(oldstring,searchstring2)-1);
  IF STRLEN(newstring) < 4 THEN
    newstring := '00' + newstring
  ELSE
    newstring := '0' + newstring;
 
  MESSAGE(newstring);

END;


Der Code soll allerdings den ganzen String durchlaufen und jeden Filterwert mit führenden Nullen versehen. Kann mir hierbei jemand helfen? Danke!

Re: Suchen Ersetzen per Report

17. Dezember 2008 10:08

Das Problem mit wechseldem Pfad hatte ich auch schon des öfteren.
Jetzt habe ich mir eine Tabelle (Dokumentenpfade) angelegt, in der die entsprechenden Pfade angelegt sind.
Code:
Dokument                Server               Ordner                                          
EINSTELLBERICHTE         \\dc-mt\data1\      daten\Einstellberichte\      
ERSTMUSTERPRÜFBERICHTE   \\dc-mt\data1\      daten\qs\empb\      
EVERYONE IMPORT          \\mt-srv1\data2\    everyone\import\      

Durch Aufruf einer Funktion in der Tabelle wird mir der richtige Pfad zurückgegeben.
Ich habe mir einmal die Arbeit gemacht in allen Tabellen und Formen den Funktionsaufruf eingebaut.
Code:
Pfad := Dokumentenpfade.Pfad('Einstellberichte')+'No.';

Bei einem Ordner- oder Serverwechsel muss ich jetzt nur einmal eine Änderung vornehmen.
Spart auf Dauer sehr viel Zeit und Mühe.

mfg
Michael