csv to html/de

From Free Pascal wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Deutsch (de)

Zurück zur Seite Code Beispiele.

Umsetzen einer CSV-Datei in eine HTML-Datei.
Verarbeiten der CSV-Datei:

unit uVerarbeiten;

unit uEinlesen;

{$mode objfpc}{$H+}
{$IMPLICITEXCEPTIONS OFF}

interface

uses
  SysUtils, FileUtil;

function subCSVDateiEinlesenUndVerarbeiten(const strNameQuellDatei: string;
  const chrDelimiter: char; const strNameZielDatei: string;
  const strRegistertitel: string; const bytHTMLHeader: byte): boolean;


implementation

const
  conSpaltenAnfang = '<td>';
  conSpaltenEnde = '</td>';
  conZeilenAnfang = '<tr>';
  conZeilenEnde = '</tr>';
  conTabellenAnfang = '<table align="center">';
  conTabellenEnde = '</table>';
  conAbsatzAnfang = '<p>';
  conAbsatzEnde = '</p>';

var
  datQuellDatei: TextFile; // CSV-Datei
  datZielDatei: TextFile;  // HTML-Datei


procedure subCSS;
begin
  WriteLn(datZielDatei, '<style type="text/css">');

  WriteLn(datZielDatei, '  table');
  WriteLn(datZielDatei, '  {');
  WriteLn(datZielDatei, '    border-collapse:collapse;');
  WriteLn(datZielDatei, '    border-style: solid;');
  WriteLn(datZielDatei, '    border-color: black;');
  WriteLn(datZielDatei, '    border-with: 1px;');
  WriteLn(datZielDatei, '    background-color: #CCCCCF;');
  WriteLn(datZielDatei, '    padding: 0.0cm;');
  WriteLn(datZielDatei, '    text-align: center;');
  WriteLn(datZielDatei, '  }');

  WriteLn(datZielDatei, '  td');
  WriteLn(datZielDatei, '  {');
  WriteLn(datZielDatei, '    border-top: solid;');
  WriteLn(datZielDatei, '    border-right: solid;');
  WriteLn(datZielDatei, '    border-bottom: solid;');
  WriteLn(datZielDatei, '    border-left: solid;');
  WriteLn(datZielDatei, '    border-with: 1px;');
  WriteLn(datZielDatei, '    padding: 0.1cm;');
  WriteLn(datZielDatei, '  }');

  WriteLn(datZielDatei, '</style>');
end;

function funSpaltenZaehlen(const strUebergabe: string;
  const chrDelimiter: char): integer;
var
  intI: integer;

begin

  funSpaltenZaehlen := 0;
  for intI := 1 to Length(strUebergabe) do
    if strUebergabe[intI] = chrDelimiter then
      Inc(funSpaltenZaehlen);

end;

// ----------------------------------------
// Unterprogramme für die HTML-Datei Anfang
// ----------------------------------------

procedure subHTMLTagSchreiben(const strTag: string; const blnZeilenumbruch: boolean);
begin
  if blnZeilenumbruch = False then
    Write(datZielDatei, strTag)
  else
    WriteLn(datZielDatei, strTag);
end;



procedure subHTMLAusgabeDateiSchliessen;
begin
  Close(datZielDatei);
end;



procedure subHTML4Kopf(const strRegistertitel: string);
begin
  writeln(datZielDatei, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"');
  writeln(datZielDatei, '"http://www.w3.org/TR/html4/loose.dtd">');
  writeln(datZielDatei, '<html>');
  writeln(datZielDatei, '<head>');
  writeln(datZielDatei, '<title>' + strRegistertitel + '</title>');
  subCSS;
  writeln(datZielDatei, '</head>');
  writeln(datZielDatei, '<body>');
  writeln(datZielDatei, '');
end;



procedure subHTML5Kopf(const strRegistertitel: string);
begin
  Append(datZielDatei);  // Setzt den Dateizeiger auf das Ende der Datei
  writeln(datZielDatei, '<!DOCTYPE HTML>');
  writeln(datZielDatei, '<html>');
  writeln(datZielDatei, '<head>');
  writeln(datZielDatei, '<title>' + strRegistertitel + '</title>');
  subCSS;
  writeln(datZielDatei, '</head>');
  writeln(datZielDatei, '<body>');
  writeln(datZielDatei, '');

end;



procedure subHTMLFuss;
begin
  writeln(datZielDatei, '</body> ');
  writeln(datZielDatei, '</html>');
end;



procedure subHTMLAusgabeDateiErstellen(const strAusgabedatei: string);
begin
  AssignFile(datZielDatei, strAusgabedatei);
  ReWrite(datZielDatei); // Erstellt die Datei bzw. überschreibt eine vorhandene Datei
  Append(datZielDatei);  // Setzt den Dateizeiger auf das Ende der Datei
end;



procedure subHTMLSpaltenErstellen(const strUebergabe: string; const chrDelimiter: char);
var
  intI: integer = 0;
  intLaenge: integer = 0;
  strZelle: string = '';

begin

  // Leere Zeilen werden übersprungen
  intLaenge := Length(strUebergabe);
  if intLaenge < 1 then
    exit;

  subHTMLTagSchreiben(conZeilenAnfang, True);
  subHTMLTagSchreiben(conSpaltenAnfang, False);

  for intI := 1 to intLaenge do
  begin

    if strUebergabe[intI] = chrDelimiter then
    begin
      Write(datZielDatei, strZelle);
      strZelle := '';
      subHTMLTagSchreiben(conSpaltenEnde, False);
      subHTMLTagSchreiben(conSpaltenAnfang, False);
    end
    else
      strZelle := strZelle + strUebergabe[intI];

  end;

  Write(datZielDatei, strZelle);

  subHTMLTagSchreiben(conSpaltenEnde, True);
  subHTMLTagSchreiben(conZeilenEnde, True);

end;



// --------------------------------------
// Unterprogramme für die HTML-Datei Ende
// --------------------------------------



function subCSVDateiEinlesenUndVerarbeiten(const strNameQuellDatei: string;
  const chrDelimiter: char; const strNameZielDatei: string;
  const strRegistertitel: string; const bytHTMLHeader: byte): boolean;
var
  strText: string = '';

begin

  Result := False;

  // Prüft, ob ein gültiger HTML-Header gewählt wurde
  if (bytHTMLHeader < 4) or (bytHTMLHeader > 5) then
    exit;

  // Prüft, ob die Quelldatei existiert
  if not FileExists(strNameQuellDatei) then
    exit;

  // Prüft, ob die Quelldatei Daten enthält
  if filesize(strNameQuellDatei) = 0 then
    exit;

  // Öffnet die Quelldatei
  AssignFile(datQuellDatei, strNameQuellDatei);
  // Setzt den Dateizeiger auf den Anfang der Datei
  Reset(datQuellDatei);

  // Erstellen der HTML-Datei - Anfang
  subHTMLAusgabeDateiErstellen(strNameZielDatei);
  case bytHTMLHeader of
    4: subHTML4Kopf(strRegistertitel);
    5: subHTML5Kopf(strRegistertitel);
  end;

  subHTMLTagSchreiben(conAbsatzAnfang, True);
  subHTMLTagSchreiben(conTabellenAnfang, True);

  repeat
    ReadLn(datQuellDatei, strText);
    subHTMLSpaltenErstellen(strText, chrDelimiter);
  until EOF(datQuellDatei);

  subHTMLTagSchreiben(conTabellenEnde, True);
  subHTMLTagSchreiben(conAbsatzEnde, True);
  subHTMLFuss;
  subHTMLAusgabeDateiSchliessen;
  // Erstellen der HTML-Datei - Ende

  // Schliesst die Quelldatei
  CloseFile(datQuellDatei);

  Result := True;

end;

end.

Aufrufen des Unterprogramms:

begin
  
  ...
  
  uVerarbeiten.subCSVDateiEinlesenUndVerarbeiten('Unbenannt 1.csv', ',',
    'Ausgabe.html', 'Testseite', 5);
  
  ...
  
end;