# -*- coding: utf-8 -*-
"""
Created on Mon Oct 12 11:19:41 2020

@author: Andrei
"""

import sys

#Definition der Funktion unter Zuhilfenahme des 1. Teils der Aufgabe 7.
def soundex_calc(wort_aus_zeile):
    for wort in wort_aus_zeile[:]:
        #Erstes Zeichen im Wort wird dem Soundex-String zugewiesen
        #print(wort)
        soundex = wort[0]

        #Vergleiche Buchstaben (ab der 2. Stelle) im Wort mit den jeweiligen definierten
        #Buchstabengruppen und weise die zugehörige Zahl als String zu.
        for letter in wort_aus_zeile[1:].upper():
            if letter in "BFPV":
                lcode = "1"
            elif letter in "CGJKQSXZ":
                lcode = "2"
            elif letter in "DT":
                lcode = "3"
            elif letter in "L":
                lcode = "4"
            elif letter in "MN":
                lcode = "5"
            elif letter in "R":
                lcode ="6"
            else:
                continue 
        
            #Überprüfe, ob die gerade ermittelte Zahl gleich der letzten Zahl im 
            #Soundex-String ist. Wenn ja, wird weiter gemacht, ohne diese Zahl zu dem
            #Soundex-String hinzuzufügen.
            if lcode == soundex[-1]:
                continue 

            #Abfrage, ob bereits 6 Zeichen im Soundex-String drin sind. Wenn ja, Abbruch.
            if len(soundex)>=6:
                break 

            #Soundex-String wird um eine neue Zahl ergänzt.
            soundex = soundex + lcode
        
        #Auffüllen nach rechts mit Nullen bis zu maximal 6 Zeichen.
        soundex = soundex.ljust(6, '0')
          
        return(soundex)
       


#Auslesen des Dateinamens aus dem 2. Argumenten in der Komandozeile, Zuweisung vom Default-Pfad.
dateiname = sys.argv[2] if len(sys.argv)>2 else "/usr/share/dict/words"

#Datei öffnen im Lesemodus mit Codec "ascii". Errors müssen ignoriert werden, weil sonst interne 
#Codec-Fehler auftreten. Die Daten werden zeilenweise ausgelesen.
ListeNamen = open(dateiname, encoding='ascii', errors='ignore').readlines()

#Auslesen des Namens für den Vergleich. Wert aus dem 1. Argumenten in der Kommandozeile.
Beispiel=sys.argv[1]

#Berechnung des Soundex-Indexes für den Vergleichsnamen.
resultatBeispiel=soundex_calc(Beispiel)

#Bildschirmausgabe zur Kontrolle.
print(resultatBeispiel)

#Berechnung der Soundex-Indexen für alle Namen in der Liste.
for Name in ListeNamen:
    result_pro_zeile=soundex_calc(Name)
    #Vergleich des aktuellen Soundex-Indexes mit dem Index vom Vergleichsnamen.
    if result_pro_zeile==resultatBeispiel:
        print(Name, result_pro_zeile)
   
    
