csv to html/de

From Free Pascal wiki

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;



--Olaf 08:52, 9 February 2014 (CET)