Editor - Zeichenübersetzung ANSI2ASCII

19. August 2014 15:02

Hallo Zusammen,

ich stehe gerade auf'm Schlauch :oops: ich brauche mal jemanden der ne Zündende Idee hat .

Ich verwende an diversen Stellen den Editor (über Waldo's Grundlagen) zur Eingabe von Texten in Aufträgen.
Dabei verwende ich folgende Übersetzung bei ANSI2ASCII:
Editor_Waldo.JPG


Die Funktionalität ist klar, aber was mir seit kurzem aufgefallen ist:

Wenn ich in den Editor (Editor aus Windows) folgenden Satz eingebe "gemäß unserer AGB - ÄÖÜ und klein äöü" bekomme ich als Übersetzung in NAV folgendes: "gemä unserer AGB - Öœ und klein äöü"

Wo ist der Fehler in der o.g. Übersetzung ... ich glaube ich bin blind :shock:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Editor - Zeichenübersetzung ANSI2ASCII

19. August 2014 19:12

Ich hab das WaldoNavPad seit Jahren nicht mehr in Aktion gesehen, aber es sollte unter Dynamics NAV 2013+ doch Unicode verwenden. Damit wäre eine Konvertierung überflüssig.

Re: Editor - Zeichenübersetzung ANSI2ASCII

20. August 2014 07:30

SilverX hat geschrieben:Ich hab das WaldoNavPad seit Jahren nicht mehr in Aktion gesehen, aber es sollte unter Dynamics NAV 2013+ doch Unicode verwenden. Damit wäre eine Konvertierung überflüssig.

Leider nicht ... ohne Konvertierung immernoch dasselbe Bild :cry:

Witzig ist: Wenn ich den Editor wieder starte (mit Text aus NAV) stehts ja richtig mit ßÄÖÜäöÜ drin, aber zurück in NAV wieder komisch (wie oben im ersten Post)

Re: Editor - Zeichenübersetzung ANSI2ASCII

20. August 2014 07:39

Hallo,

wir hatten das Thema hier gerade.

Der einzig gangbare Weg scheint im Moment über die Funktion aus der CU 11501 zu sein. Die funktioniert :wink:

Gruß, Fiddi

Re: Editor - Zeichenübersetzung ANSI2ASCII

20. August 2014 08:11

fiddi hat geschrieben:Hallo,

wir hatten das Thema hier gerade.

Der einzig gangbare Weg scheint im Moment über die Funktion aus der CU 11501 zu sein. Die funktioniert :wink:

Gruß, Fiddi


Hallo Fiddi,

danke, aber bringt dasselbe Ergebnis :-(

Gruß,
Mr.Nav
Zuletzt geändert von Mr.Nav am 20. August 2014 08:47, insgesamt 1-mal geändert.

Re: Editor - Zeichenübersetzung ANSI2ASCII

20. August 2014 08:45

Hallo,

ich habe zwar schon von Waldo's- Navpad gehört, habe mir aber eine eigene Komponente geschrieben, die so ähnlich funktioniert. Bei der muss ich allerdings keinerlei Konvertierung bei der Übergabe vornehmen, NAV macht das schon beim Aufruf automatisch :!: :?:

Gruß, Fiddi

Re: Editor - Zeichenübersetzung ANSI2ASCII

20. August 2014 09:49

Also evtl. denke ich auch viel zu kompliziert ...

hier der alte Quellcode der unter NAV 2009 funktioniert ...
Code:
 
LOCAL ImportNotePadDocumentLines(parCommentLength : Integer)
FileNameLoc := MagicPath;
FOR i := STRLEN(MagicPath) DOWNTO 1 DO BEGIN
  IF MagicPath[i] = '\' THEN BEGIN
    MagicPath := COPYSTR(MagicPath,1,i);
    Length := STRLEN(MagicPath);
    i := 1;
  END;
END;
FileNameLoc := COPYSTR(FileNameLoc,Length);
UPLOADINTOSTREAM('', MagicPath, '', FileNameLoc, TempStream);

loctxtComment := '';
locintCountLength := 0;
locintCommentLength := parCommentLength;
WHILE NOT TempStream.EOS DO BEGIN
  locintNoteLength := TempStream.READTEXT(loctxtNotePad,1024);
    loctxtNotePad := COPYSTR(StreamReader.ReadLine,1,locintNoteLength);
  IF loctxtComment <> '' THEN BEGIN
    IF COPYSTR(loctxtComment,STRLEN(loctxtComment),1) <> ' ' THEN
      loctxtComment := loctxtComment + ' ';
    loctxtNotePad := loctxtComment + loctxtNotePad;
    locintNoteLength += STRLEN(loctxtComment);
    loctxtComment := '';
    locintCountLength := 0;
  END;
  locbooForceCR := intReturnNo <> 0;
  IF locintNoteLength = 1024 THEN
    locbooForceCR := FALSE;
  locintCopyFrom := 1;
  locintLastPos := 1;
  IF (STRLEN(loctxtNotePad) + locintCountLength > locintCommentLength) THEN BEGIN
    FOR i := 1 TO STRLEN(loctxtNotePad) DO BEGIN
      locintCountLength += 1;
      IF COPYSTR(loctxtNotePad,i,1) IN [' ',',','.','?','!',':',';'] THEN BEGIN
        loctxtComment := loctxtComment + COPYSTR(loctxtNotePad,locintLastPos,i + 1 - locintLastPos);
        locintLastPos := i + 1;
      END;
      IF locintCountLength = locintCommentLength THEN BEGIN
        IF loctxtComment = '' THEN BEGIN
          locintLastPos := i + 1;
          loctxtComment := COPYSTR(loctxtNotePad,locintCopyFrom,locintLastPos - locintCopyFrom);
        END;
        locintCountLength := i - locintLastPos + 1;
        loctxtComment := ANSI2ASCII(loctxtComment);
        IF COPYSTR(loctxtComment,STRLEN(loctxtComment),1) = ' ' THEN
          loctxtComment := COPYSTR(loctxtComment,1,STRLEN(loctxtComment) - 1);
        WriteCommentDocumentLines(loctxtComment,FALSE);
        locintCopyFrom := locintLastPos;
        IF STRLEN(loctxtNotePad) - locintCopyFrom < locintCommentLength THEN BEGIN
          loctxtComment := COPYSTR(loctxtNotePad,locintCopyFrom);
          IF COPYSTR(loctxtComment,1,1) = ' ' THEN
            loctxtComment := COPYSTR(loctxtComment,2);
          locintCountLength := STRLEN(loctxtComment);
          i := STRLEN(loctxtNotePad);
          IF TempStream.EOS OR locbooForceCR THEN BEGIN
            locintCountLength := 0;
            loctxtComment := ANSI2ASCII(loctxtComment);
            WriteCommentDocumentLines(loctxtComment,TRUE);
          END;
        END;
      END;
    END;
  END ELSE BEGIN
    loctxtComment := loctxtNotePad;
    loctxtComment := ANSI2ASCII(loctxtComment);
    WriteCommentDocumentLines(loctxtComment,locbooForceCR);
  END;
END;


Wenn ich den Code jetzt umstelle (gemäß Kowas Hinweis aus o.g. Post Direktlink), sieht er wie folgt aus und es klappt mit der Übersetzung ABER nur für die erste Zeile ... Zeilenumbrüche etc. bekommt er nicht mehr hin ich denke das hat was mit dem DotNet "StremReader" zu tun:
Code:
LOCAL ImportNotePadDocumentLines(parCommentLength : Integer)
FileNameLoc := MagicPath;
FOR i := STRLEN(MagicPath) DOWNTO 1 DO BEGIN
  IF MagicPath[i] = '\' THEN BEGIN
    MagicPath := COPYSTR(MagicPath,1,i);
    Length := STRLEN(MagicPath);
    i := 1;
  END;
END;
FileNameLoc := COPYSTR(FileNameLoc,Length);
UPLOADINTOSTREAM('', MagicPath, '', FileNameLoc, TempStream);

StreamReader := StreamReader.StreamReader(TempStream,Encoding.Default);

loctxtComment := '';
locintCountLength := 0;
locintCommentLength := parCommentLength;
WHILE NOT StreamReader.EndOfStream DO BEGIN
  locintNoteLength := STRLEN(StreamReader.ReadLine);
//  loctxtNotePad := COPYSTR(StreamReader.ReadLine,1,locintNoteLength);
  IF loctxtComment <> '' THEN BEGIN
    IF COPYSTR(loctxtComment,STRLEN(loctxtComment),1) <> ' ' THEN
      loctxtComment := loctxtComment + ' ';
    loctxtNotePad := loctxtComment + loctxtNotePad;
    locintNoteLength += STRLEN(loctxtComment);
    loctxtComment := '';
    locintCountLength := 0;
  END;
  locbooForceCR := intReturnNo <> 0;
  IF locintNoteLength = 1024 THEN
    locbooForceCR := FALSE;
  locintCopyFrom := 1;
  locintLastPos := 1;
  IF (STRLEN(loctxtNotePad) + locintCountLength > locintCommentLength) THEN BEGIN
    FOR i := 1 TO STRLEN(loctxtNotePad) DO BEGIN
      locintCountLength += 1;
      IF COPYSTR(loctxtNotePad,i,1) IN [' ',',','.','?','!',':',';'] THEN BEGIN
        loctxtComment := loctxtComment + COPYSTR(loctxtNotePad,locintLastPos,i + 1 - locintLastPos);
        locintLastPos := i + 1;
      END;
      IF locintCountLength = locintCommentLength THEN BEGIN
        IF loctxtComment = '' THEN BEGIN
          locintLastPos := i + 1;
          loctxtComment := COPYSTR(loctxtNotePad,locintCopyFrom,locintLastPos - locintCopyFrom);
        END;
        locintCountLength := i - locintLastPos + 1;
        loctxtComment := ANSI2ASCII(loctxtComment);
        IF COPYSTR(loctxtComment,STRLEN(loctxtComment),1) = ' ' THEN
          loctxtComment := COPYSTR(loctxtComment,1,STRLEN(loctxtComment) - 1);
        WriteCommentDocumentLines(loctxtComment,FALSE);
        locintCopyFrom := locintLastPos;
        IF STRLEN(loctxtNotePad) - locintCopyFrom < locintCommentLength THEN BEGIN
          loctxtComment := COPYSTR(loctxtNotePad,locintCopyFrom);
          IF COPYSTR(loctxtComment,1,1) = ' ' THEN
            loctxtComment := COPYSTR(loctxtComment,2);
          locintCountLength := STRLEN(loctxtComment);
          i := STRLEN(loctxtNotePad);
          IF TempStream.EOS OR locbooForceCR THEN BEGIN
            locintCountLength := 0;
            loctxtComment := ANSI2ASCII(loctxtComment);
            WriteCommentDocumentLines(loctxtComment,TRUE);
          END;
        END;
      END;
    END;
  END ELSE BEGIN
    loctxtComment := loctxtNotePad;
    loctxtComment := StreamReader.ReadLine;
    WriteCommentDocumentLines(loctxtComment,locbooForceCR);
  END;
END;


Help, please ... das ist echt zum Haare raufen :evil:

--> der Kasus knaktus scheint also die Umwandlung mit "Default" zu sein (Encoding.Default) ... ich meine damit er die Zeichen korrekt übersetzt ....