'''
Programm zur Umwandlung einer Filius-Log-Datei in eine csv-Datei,
die in Libre Office oder Open Office Calc angezeigt werden kann.
(Trennzeichen Tabulator '\t')
'''

def lies(dateiname = 'mitschnitt.txt'):
    '''
    Einlesen der Textdatei und Rueckgabe als Liste der Zeilen
    
    "mitschnitt.txt" ist der Standardparameter fuer den
    Dateinamen und kann im Hauptprogramm ersetzt werden.
    '''
    try:
        datei = open(dateiname)
    except:
        print('Datei nicht gefunden.')
        return []
    else:
        tabellenzeilen = datei.readlines()
        datei.close()
        return tabellenzeilen


def schreibe(text, dateiname = 'mitschnitt_konvertiert'):
    '''
    speichert Inhalt einer Zeichenkette als csv-Datei
            
    "mitschnitt_auto" ist der Standardparameter fuer den
    Dateinamen und kann im Hauptprogramm ersetzt werden.
    Die Dateiendung wird automatisch hinzugefuegt.
    '''
    try:
        datei = open('./' + dateiname + '.csv', 'x')
    except:
        print('Die Datei '+ './'+dateiname+'.csv ist bereits vorhanden.')
        ueberschreiben = input("Soll die Datei überschrieben werden? (j/n): ")
        if ueberschreiben in 'jJyY':
            datei = open('./' + dateiname + '.csv', 'w')
        else:
            return False
    else:
        pass
    datei.write(text)
    datei.close()
    return True
    
# Beginn Hauptprogramm
print('Umwandlung einer Filius-Log-Datei in eine csv-Datei\n===================================================')
# Einlesen der QUELLDATEI aus dem aktuellen Verzeichnis.
quelle = input('Name der Quelldatei (muss sich im aktuellen Verzeichnis befinden): ') # z. B. 'mitschnitt.txt'
zeilen = lies('.\\' + quelle)
if zeilen != []:
        
    # Entfernen aller Zeilen, die mit '+' beginnen
    i = 0
    while i < len(zeilen):
        if zeilen[i][0] == '+': # 1, 2
            del(zeilen[i])
            i -= 1
        i += 1


    # Behandlung einzelner Zeilen und Zusammenfuehren als Zeichenkette
    csv_text = ''
    i = 0
    while i < len(zeilen):
        # Diverse einfache Suchen und Ersetzen-Operationen fuer Trennzeichen
        zeilen[i] = zeilen[i].replace(' | \r\n| ', '\r\n')  # 3: ok
        zeilen[i] = zeilen[i].replace(' | \r\n', '\r\n')    # 4: ok
        zeilen[i] = zeilen[i].replace('| Nr', 'Nr')         # 5: ok
        zeilen[i] = zeilen[i].replace(' | ', '\t')           # 6: ok
        zeilen[i] = zeilen[i].replace('| ', '')             # 7: ok
        zeilen[i] = zeilen[i].replace('\t\n', ' \n')         # leere letzte Spalten loeschen
        # Entfernen aller doppelten Leerzeichen
        while '  ' in zeilen[i]:
            zeilen[i] = zeilen[i].replace('  ', ' ')        # 8: ok
        # IP-Nummern in Zeichenkette konvertieren

        eintraege = zeilen[i].split('\t')
        if ":" not in eintraege[2] and eintraege[2].count('.') == 3:
            eintraege[2] = '"' + eintraege[2] + '"'
        if ":" not in eintraege[3] and eintraege[3].count('.') == 3:
            eintraege[3] = '"' + eintraege[3] + '"'
        zeilen[i] = ''
        for eintrag in eintraege:
            zeilen[i] += eintrag+'\t'
        zeilen[i] = zeilen[i][:-1]
        #print(zeilen[i])
        csv_text += zeilen[i]                               # Zeilen in text
        i += 1

            
    # Loeschen etwaiger Zeilenwechsel in der letzten Spalte
    csv_text = csv_text.replace(' \n \t \t \t \t \t \t', ' ')
    # diverse einfache Suchen- und Ersetzen-Operationen für Leerzeichen
    csv_text = csv_text.replace(' \t','\t')
    csv_text = csv_text.replace(' \r\n','\r\n')
    csv_text = csv_text.replace('Bemerkungen / ','Bemerkungen/')
    csv_text = csv_text.replace(',target',', target')
    csv_text = csv_text.replace(',sender',', sender')
    # Behandlung Semikolon in html/css
    #csv_text = csv_text.replace('; ',' ')

    #Kontrollausdruck moeglich
    #print(csv_text)
    
    ziel = input('Name der Zieldatei (Dateikennung wird automatisch angefügt): ')
    # Schreiben in ZILEDATEI im aktuellen Verzeichnis
    vollzug = schreibe(csv_text, ziel)
    if vollzug:
        print('Die Datei ' + ziel + '.csv wurde gespeichert.')
    else:
        print('Die Datei ' + ziel + '.csv konnte nicht geschrieben werden.')