blikk info infothek forum galerie sitemap

Überschrift

anfang zurueck weiter ende nach oben
     Personendaten
aus Textdateien lesen 
      und sortieren


 

 

PROGRAM Persttab;

CONST
  max = 100;


TYPE
  tpers = RECORD
            name     : STRING[20]; 
            nachname : STRING[20];
            plz      : STRING[10]; 
            ort      : STRING[20];
          END;


  tperstab= ARRAY [1..max] OF tpers;   
  t_str = STRING[100];
  t_strarr = ARRAY [1..100] OF t_str;


{Prozedur zum Ausgeben der Tabelle}

PROCEDURE Persaus(tab : tperstab; 
                  anz : INTEGER);
VAR
  i : INTEGER;
BEGIN
  FOR i := 1 TO anz DO BEGIN
    Writeln('Name    : ',tab[i].name);
    Writeln('Nachname: ',tab[i].nachname);
    Writeln('Plz     : ',tab[i].plz);
    Writeln('Ort     : ',tab[i].ort);
    Writeln;
  END;
END;


{Prozedur zum Speichern der Daten in einer Textdatei}

PROCEDURE dataus (pfad: STRING;
               
VAR tab: tperstab;
                  
anz: INTEGER);
VAR
  i: INTEGER;
  datei: TEXT;
BEGIN
  Assign(datei,pfad);
  Rewrite(datei);
  FOR i:= 1 TO anz DO BEGIN
    Write(datei,tab[i].name,'!');
    Write(datei,tab[i].nachname,'!');
    Write(datei,tab[i].plz,'!');
    Writeln(datei,tab[i].ort);
  END;
  Close(datei);
END;


{Prozedur zum Formatieren einer Zeile im Csv- Format}

PROCEDURE Csvformat(trennzeichen  : CHAR;
                    zeile : STRING;
                    VAR strarr : t_strarr;
                    VAR stranz : INTEGER);
VAR
  i, i_alt, anf  :INTEGER;
BEGIN
  stranz := 0;
  anf := 1;
  FOR i := 1 TO Length(zeile) DO BEGIN
    IF (zeile[i] = trennzeichen) THEN BEGIN
      stranz := stranz + 1;
      strarr[stranz] := copy(zeile,anf,i - anf);
      anf := i + 1;
    END;
  END;
  stranz := stranz + 1;
  strarr[stranz] := copy(zeile,anf,Length(zeile) - anf + 1);
END;


{Prozedur zum einlesen der Personendaten aus einer Textdatei}

PROCEDURE perseinl (pfad: STRING;
                    VAR ptab: tperstab;
                    VAR ptabanz : INTEGER);
VAR
  tabanz : INTEGER;  
  zeile   : STRING;   
  datei   : TEXT;     
  wort    : STRING;   
  j       : INTEGER;   
  strarr  : t_strarr;
  stranz  : INTEGER;
BEGIN
  Assign(datei,pfad);  
  Reset (datei);     
  tabanz := 0;         
  WHILE NOT(eof(datei)) DO BEGIN
    Readln(datei,zeile);       
    Csvformat('!',zeile,strarr,stranz);
    ptabanz := ptabanz + 1;
    ptab[ptabanz].name     := strarr[1];
    ptab[ptabanz].nachname := strarr[2];
    ptab[ptabanz].plz      := strarr[3];
    ptab[ptabanz].ort      := strarr[4];
  END;
  close(datei);
END;


{Prozedur zum Vertauschen der Werte in der Verbundtabelle}

PROCEDURE Vertausche(VAR a : tpers;
                     VAR b : tpers);
VAR
 h : tpers;
BEGIN
  h := a;
  a := b;
  b := h;
END;


{Prozedur zum Sortieren der Verbundtabelle, nach beliebigem Kriterium}

PROCEDURE sortt (VAR a : tperstab;
                 wahl : INTEGER;
                 anz  : INTEGER);
VAR
  i, j: INTEGER;
  hilf   : tpers;
BEGIN
  FOR i:= 2 TO anz DO BEGIN
    FOR j:= anz DOWNTO i DO BEGIN
      CASE wahl OF
        1: IF a[j-1].name > a[j].name THEN
               Vertausche(a[j],a[j-1]);
        2: IF a[j-1].nachname > a[j].nachname THEN
               Vertausche(a[j],a[j-1]);
        3: IF a[j-1].plz > a[j].plz THEN
               Vertausche(a[j],a[j-1]);
        4: IF a[j-1].ort > a[j].ort THEN
               Vertausche(a[j],a[j-1]);
      END;
    END;
  END;
END;


VAR
  perstab: tperstab;
  persanz : INTEGER;
  wahl: INTEGER;


{Beginn des Hauptprogammes}

BEGIN
  perseinl('Pfad',perstab,persanz);
  persaus(perstab, persanz);
  Writeln('Sortieren nach: ');
  Writeln;
  Writeln('Name      [1]');
  Writeln('Nachname  [2]');
  Writeln('Plz       [3]');
  Writeln('Ort       [4]');
  Writeln;
  Write('Ihre Wahl: ');
  Readln(wahl);
  Writeln;
  sortt(perstab,wahl,persanz);
  persaus(perstab, persanz);
  dataus('Pfad',perstab,persanz);
  Readln;
END.


Vor dem Sortieren:  
 



Daten nach dem Sortieren nach Postleitzahl:


 





                                               ZURÜCK



 
nach oben