AGB  ·  Datenschutz  ·  Impressum  







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

Textdatei mit D2 erstellen

Ein Thema von MPirnstill · begonnen am 27. Jul 2005 · letzter Beitrag vom 28. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#1

Textdatei mit D2 erstellen

  Alt 27. Jul 2005, 09:03
Hi Leute!

Der Titel hört sich simpel an, aber ich bin schon fast am verzweifeln.
Ist vielleicht auch nur indirekt ein Delphi-Problem.

Folgende Situation:
Mein Delphi 2.0 Prog erstellt eine Serienbriefsteuerdatei für MS-Word. Früher hatten wir noch Word 97 im Einsatz und es funktionierte alles, doch jetzt haben wir Word 2003 im Einsatz. Und plötzlich will Word unter bestimmten Umständen (Umlaute oder Paragraphenzeichen) das der Anwender den Zeichensatz für die Steuerdatei bestätigt und schlägt irgend so einen japanischen Zeichensatz vor. Klickt man auf Windows (Standard) und OK, dann ist alles in Ordnung.

Jetzt ist mein Prog aber so konzipiert, daß es Word über OLE mit dem Serienbrief-Dokument und der entsprechenden Steuerdatei anschubst. Dabei fragt Word diese Bestätigung nicht mehr ab und druckt irgendwelche Schmierzeichen anstatt. Leider kann man Word anscheinend nicht sagen, daß es immer den Standard-Zeichensatz verwenden soll.

Der Fehler liegt aber auch nicht im Word-Dokument sondern in der Steuerdatei. Denn der 'Fehler' tritt auch dann schon auf, wenn ich einfach nur versuche die Steuerdatei mit Word zu öffnen.
Die Steuerdatei ist eine Textdatei mit Spaltenüberschriften in der ersten Zeile. Separiert mit Semikolon. Zeilenabschluß mit Enter (x'0D') und Zeilenschaltung (x'0A'). Und in den Folgezeile jeweils ein Wert zu jeder Überschrift. Die Überschriften stimmen auch mit der Anzahl der Werte überein. In meinem Prog habe ich den 'TextFile' mit AssignFile, Rewrite, Write, CloseFile erzeugt.

Also etwas vereinfacht. Habe ich Umlaute oder Paragraphen in meiner Steuerdatei kann Word den Zeichensatz nicht eindeutig ermitteln. Lasse ich diese Zeichen weg, öffnet Word die Datei problemlos, ohne Nachfrage.

Soweit zur Situation!

Um das ganze etwas zu komplizieren! Ich erzeuge mit dem Prog natürlich Dutzende von Steuerdateien für Serienbriefe. Auch mit Umlauten und Paragraphenzeichen und die funktionieren anscheinend wunderbar.

Ich habe die Steuerdateien sogar schon mit einem HexEditor untersucht und die Umlaute sehen nicht nur gleich aus, sondern haben auch den gleichen Hexadezimal-Code. Es ist zum verrückt werden.

Ich kann keinen Unterschiede diesen einfachen Textdateien erkennen, der Word veranlassen könnte einmal so und einmal so zu reagieren.

Weiß einer von euch Hilfe oder überhaupt erstmal woran das liegt?.
Oder gibt noch irgendwelche Merkmale/Eigenschaften die ich von den Steuerdateien vergleichen könnte?

Gruß

Micha
Micha
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#2

Re: Textdatei mit D2 erstellen

  Alt 27. Jul 2005, 13:53
Hi!

Ich bin's noch mal!

Mir scheint ich habe mal wieder ein Thema angeschnitten was keiner mag! ... Office! ... Ich meine MS-Office.
Ich ärgere mich immer wieder darüber wie schlau Word sein will und dann immer Ärger macht, aber leider muß ich damit arbeiten.

Ich wäre für jede Hilfe dankbar.

Gruß
Micha
Micha
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Textdatei mit D2 erstellen

  Alt 27. Jul 2005, 13:57
Für D2 wirds problematisch...

Kannst Du deine Textdatei entweder UTF8-Codiert (mit UTF-8 BOM) oder gleich Unicodisch erzeugen? Damit dürft auch Word wieder zahm sein, da es jetzt nicht versuchen muß irgendwelche Codepages zu erkennen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Textdatei mit D2 erstellen

  Alt 27. Jul 2005, 14:03
Zitat von MPirnstill:
Der Fehler liegt aber auch nicht im Word-Dokument sondern in der Steuerdatei. Denn der 'Fehler' tritt auch dann schon auf, wenn ich einfach nur versuche die Steuerdatei mit Word zu öffnen.
Die Steuerdatei ist eine Textdatei mit Spaltenüberschriften in der ersten Zeile. Separiert mit Semikolon. Zeilenabschluß mit Enter (x'0D') und Zeilenschaltung (x'0A'). Und in den Folgezeile jeweils ein Wert zu jeder Überschrift. Die Überschriften stimmen auch mit der Anzahl der Werte überein. In meinem Prog habe ich den 'TextFile' mit AssignFile, Rewrite, Write, CloseFile erzeugt.
Hast du schon mal daran gedacht, die Steuerdatei im Unicode Zeichensatz zu schreiben?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#5

Re: Textdatei mit D2 erstellen

  Alt 27. Jul 2005, 14:04
Hi, Bernd!

Erstmal Danke, das du geantwortet hast.

Zitat von Bernhard Geyer:
Kannst Du deine Textdatei entweder UTF8-Codiert (mit UTF-8 BOM) oder gleich Unicodisch erzeugen?
Wie erzeuge ich die Datei denn im Unicode?
Bislang habe ich mit AssignFile, Rewrite, Write und CloseFile gearbeitet, aber ich habe schon gesucht und leider nicht gefunden wie ich den Funktionen einen Zeichensatz mitteilen kann.

Kann man das über andere Funktionen evtl. besser realisieren?

Gruß
Micha
Micha
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Textdatei mit D2 erstellen

  Alt 27. Jul 2005, 14:14
Unter Delphi >= 5 gibt es genügend Lösungen mit diversen Unicode-Komponenten (ElPack/TNTWare).

Unter Delphi2 wirst du hier mittels TFileStream die Daten selbst "Unicodisch" rausschreiben müssen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#7

Re: Textdatei mit D2 erstellen

  Alt 27. Jul 2005, 15:45
Zitat von Bernhard Geyer:
Unter Delphi2 wirst du hier mittels TFileStream die Daten selbst "Unicodisch" rausschreiben müssen.
Ich hab das gerade mal versucht, aber das scheint nicht ganz so einfach zu sein. ..in D2.
Meine neue Routine zum Schreiben der Datei läuft fehlerfrei durch, aber es steht nur Müll drin. Auch Word kriegt das nicht gelesen was ich da rausschreibe. Kannst du evtl. mal einen Blick auf meine Routine werfen, und mir sagen was ich da falsch mache.

Delphi-Quellcode:
function TSteuerdatei.Save: Boolean;
var
  fs: TFileStream;
  s: String;
  su: PWideChar;
  ls: Cardinal; //Länge von s auf Uni hochgerechnet. Richtig?
begin
  try
    //String erstellen und in Unicode umwandeln
    s := AufbereitenAusgabe; //Gibt aufbereiteten String zurück
    ls := length(s) * SizeOf(WideChar); //Länge errechnen
    su := allocMem(ls); //Platz besorgen
    su := StringToWideChar(s, su, ls); //String in Unicode umwandeln
    //FileStream schreiben
    fs := TFileStream.Create(FPfadDateiName, fmCreate);
    fs.Write(su, ls);
    fs.Free;
    fs := nil;
    Result := True;
  except
    on E:Exception do
      Result := False;
  end;
end;
Da ich vom Handling mit Unicode keine Ahnung hab, habe ich mir dies aus der Hilfe und dem Forum so zusammengestoppelt.
Aber es funktioniert eben noch nicht.

Gruß
Micha
Micha
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#8

Re: Textdatei mit D2 erstellen

  Alt 27. Jul 2005, 15:47
Zitat von shmia:
Hast du schon mal daran gedacht, die Steuerdatei im Unicode Zeichensatz zu schreiben?
Ich möchte mich auch bei dir für die Antwort bedanken. Hatte die vorhin nur noch nicht gesehen als ich Bernhard geantwortet hab.

Gruß
Micha
Micha
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Textdatei mit D2 erstellen

  Alt 27. Jul 2005, 17:23
Delphi-Quellcode:
procedure SaveWideStringToFile(const filename:string; const ws:WideString);
var
   fs : TFileStream;
   data : WideStream;
begin
   data := ' '+ws;
   data[1] := Widechar($FEFF); // BOM = Byte Order Mark
   fs := TFileStream.Create(filename, fmCreate);
   try
      fs.WriteBuffer(data[1], Length(data)*sizeof(Widechar));
   finally
      fs.Free;
   end;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#10

Re: Textdatei mit D2 erstellen

  Alt 28. Jul 2005, 08:06
Hey shmia,

danke für die Routine!

Zitat von shmia:
Delphi-Quellcode:
procedure SaveWideStringToFile(const filename:string; const ws:WideString);
var
   fs : TFileStream;
   data : WideStream;
begin
   data := ' '+ws;
   data[1] := Widechar($FEFF); // BOM = Byte Order Mark
   fs := TFileStream.Create(filename, fmCreate);
   try
      fs.WriteBuffer(data[1], Length(data)*sizeof(Widechar));
   finally
      fs.Free;
   end;
end;
aber du übergibst da der Procedure einen WideString, kann ich den benutzen wie einen normalen String oder wie versorge ich den. Irgendwie kennt mein Delphi leider auch keinen Widestring und auch keinen WideStream. Könnte es sein das dies erst ab Delphi > 2.0 funktioniert. Ich hab zwar höhere Delphi-Versionen, aber dieses ganze Projekt ist eben in D2 und das hierfür umzustellen wäre zu aufwendig.

Hast du einen Tipp wie man das unter D2 realisieren kann?

Gruß
Micha

P.S.: Mir ist schon übel von diesem Unicode-Kram.
Kann MS-Word nicht mal einfach so blöd sein und tun was man will.
Micha
  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 00:48 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