home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SOUNDEX.PAS *)
- (* Phonetisches Suchen mit Turbo Pascal *)
- (* (c) 1990 Bodo Joest & TOOLBOX *)
- (* ------------------------------------------------------ *)
- USES Crt;
-
- TYPE
- AdrType = RECORD
- Name : STRING;
- Strasse : STRING;
- Ort : STRING;
- END;
- VAR
- Name : STRING;
- Adresse : AdrType;
-
- FUNCTION UpString(Text : STRING): STRING;
- VAR
- i: BYTE;
- BEGIN
- FOR i := 1 TO Length(Text) DO
- Text[i] := UpCase(Text[i]);
- UpString := Text;
- END;
-
- FUNCTION Soundex(Index : STRING): STRING;
- { Umwandlung eines Strings in eine Phonemkette }
- CONST { Phoneme }
- BFPV = ['B', 'F', 'P', 'V'];
- CGJKQSXZ = ['C', 'G', 'J', 'K', 'Q', 'S', 'X', 'Z'];
- DT = ['D', 'T'];
- L = ['L'];
- MN = ['M', 'N'];
- R = ['R'];
- VAR
- i : BYTE;
- Code : STRING[5];
- CodeLen : BYTE ABSOLUTE Code;
- BEGIN
- Index := UpString(Index);
- Code := Index[1];
- i := 2;
- WHILE (i <= Length(Index)) AND (CodeLen < 5) DO BEGIN
- IF (Index[i] IN BFPV) AND
- (Code[CodeLen] <> '1') THEN
- Code := Code + '1'
- ELSE
- IF (Index[i] IN CGJKQSXZ) AND
- (Code[CodeLen] <> '2') THEN
- Code := Code + '2'
- ELSE
- IF (Index[i] IN DT) AND
- (Code[CodeLen] <> '3') THEN
- Code := Code + '3'
- ELSE
- IF (Index[i] IN L) AND
- (Code[CodeLen] <> '4') THEN
- Code := Code + '4'
- ELSE
- IF (Index[i] IN MN) AND
- (Code[CodeLen] <> '5') THEN
- Code := Code + '5'
- ELSE
- IF (Index[i] IN R) AND
- (Code[CodeLen] <> '6') THEN
- Code := Code + '6';
- Inc(i);
- END;
- Code := Code + '0000';
- Soundex := Code;
- END;
-
- BEGIN { Hauptprogramm }
- ClrScr;
- Adresse.Name := 'Meier';
- Adresse.Strasse := 'Musterstr. 5';
- Adresse.Ort := '4711 Musterstadt';
- REPEAT
- Write('Name : ');
- ReadLn(Name);
- IF Soundex(Name) = Soundex(Adresse.Name) THEN BEGIN
- WriteLn ('Name : ', Adresse.Name);
- WriteLn ('Straße : ', Adresse.Strasse);
- WriteLn ('Ort : ', Adresse.Ort);
- WriteLn;
- END ELSE BEGIN
- WriteLn ('Name nicht gefunden.');
- WriteLn;
- END;
- UNTIL Name = '';
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SOUNDEX.PAS *)