Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Pressemitteilungs-Tool

  Alt 19. Mär 2013, 23:54
Wenn Delphi-Code gepostet wird, wäre es schön, wenn der in Delphi-Tags gesetzt wird, dann bekommt man auch kein Augenkrebs

so schreiben
Code:
[DELPHI]
procedure foo;
begin
  // ein Kommentar
end;
[/DELPHI]
und so aussehen
Delphi-Quellcode:
procedure foo;
begin
  // ein Kommentar
end;
Um einen String zuverlässig in eine Zeile zu schreiben, sollte man spezielle Zeichen, wie die Zeilenumbrüche, einfach escapen

Delphi-Quellcode:
uses
  SysUtils;

const
  C_ESCAPE_CHAR = '\';
  C_SUBST_CHARS : array[0..7] of char = ( #0, #7, #8, #9, #10, #11, #12, #13 );
  C_ESCAPE_CHARS : array[0..7] of char = ( '0', 'a', 'b', 't', 'n', 'v', 'f', 'r' );

function EscapeStr( const AStr : string ) : string;
var
  LIdx : Integer;
begin
  Result := AStr;

  Result := StringReplace( Result, C_ESCAPE_CHAR, C_ESCAPE_CHAR + C_ESCAPE_CHAR, [rfReplaceAll] );

  for LIdx := 0 to 7 do
    Result := StringReplace( Result, C_SUBST_CHARS[LIdx], C_ESCAPE_CHAR + C_ESCAPE_CHARS[LIdx], [rfReplaceAll] );
end;

function UnescapeStr( const AStr : string ) : string;
var
  LIdx : Integer;
begin
  Result := AStr;

  for LIdx := 0 to 7 do
    Result := StringReplace( Result, C_ESCAPE_CHAR + C_ESCAPE_CHARS[LIdx], C_SUBST_CHARS[LIdx], [rfReplaceAll] );

  Result := StringReplace( Result, C_ESCAPE_CHAR + C_ESCAPE_CHAR, C_ESCAPE_CHAR, [rfReplaceAll] );
end;
Jeden String, den du in die Datei schreibst schickst du jetzt einmal durch den Escaper
Delphi-Quellcode:
procedure TForm1.Speichern1Click( Sender: TObject );
var
  Datei: TextFile;
begin
  if SaveDialog1.Execute
  then
    begin
      AssignFile( Datei, SaveDialog1.FileName );
      Rewrite( Datei );
      WriteLn( Datei, EscapeStr( EditName.Text ) );
      WriteLn( Datei, EscapeStr( EditEmail.Text ) );
      WriteLn( Datei, EscapeStr( EditPassword.Text ) );
      WriteLn( Datei, EscapeStr( EditTelefon.Text ) );
      WriteLn( Datei, EscapeStr( EditUeberschrift.Text ) );
      WriteLn( Datei, EscapeStr( EditBeschreibung.Text ) );
      WriteLn( Datei, EscapeStr( EditAnmerkungen.Text ) );
      WriteLn( Datei, EscapeStr( MemoAdresse.Text ) );
      CloseFile( Datei );
    end;
  end;
Beim Zurücklesen natürlich einmal wieder durch den Unescaper
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (20. Mär 2013 um 00:11 Uhr)
  Mit Zitat antworten Zitat