MBrendecke icon

Telefon

MBrendecke | PRO | 04/17/19 10:53:20 PM UTC | 0 ⭐ | 645 👁️ | Never ⏰ | []
C# |

19.4 KB

|

None

|

0 👍

/

0 👎

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Windows.Forms;
 
namespace SynVation_Vergleichstool
{
    public partial class SynVationVergleichstool : Form
    {
        private OpenFileDialog _dialog;
        private string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        private string connectionstring = @"Data Source=localhost;Initial Catalog=Telefonabgleich CSV Tool;Integrated Security=True";
        private int pos_air = 0;
        private int pos_telekom = 0;
        private int pos_haustelefon = 0;
        private string anrufer_get = "";
        private string anrufer_air = "";
        private SqlCommand cmd;
        private SqlConnection con;
 
        public SynVationVergleichstool() => InitializeComponent();
 
        private void InitOpenFileDialog() => _dialog = new OpenFileDialog
        {
            DefaultExt = ".txt",
            Filter = "Comma Seperated (*.txt)|*.txt"
        };
 
        private void SetText(TextBox box, string @default = "") =>
            box.Text = (_dialog.ShowDialog() == DialogResult.OK)
            ? _dialog.FileName
            : @default;
 
        private void search_airspeed_Click(object sender, EventArgs e) => SetText(pfad_airspeed);
        private void search_get_Click(object sender, EventArgs e) => SetText(pfad_get);
        private void search_telekom_Click(object sender, EventArgs e) => SetText(pfad_telekom);
        private void search_haustelefon_Click(object sender, EventArgs e) => SetText(pfad_haustelefon);
 
        private void kombinieren_Button_Click(object sender, EventArgs e)
        {
            StreamReader reader_Haustelefon = new StreamReader(Path.Combine(docPath, "Haus_Telefonnummern.txt")/*haustelefon_PfadDatei*/);
            // StreamReader reader_GetDatei = new StreamReader(Path.Combine(docPath, "get_12_2018.txt")/*get_PfadDatei*/);
            StreamReader reader_AirDatei = new StreamReader(Path.Combine(docPath, "airspeed_12_2018.txt")/*air_PfadDatei*/);
            StreamReader reader_Telekomdatei = new StreamReader(Path.Combine(docPath, "telekom_12_2018.txt")/*telekom_PfadDatei*/);
 
            string[] zeilenget = File.ReadAllLines(pfad_get.Text);
 
            foreach (string zeile in zeilenget)
            {
                string[] words = zeile.Split(new[] { "\",\"" }, StringSplitOptions.None);
 
                if (words.Length >= 1)
                {
 
                    // Die einzelnen Dateien aus der Get Datei werden herausgezogen damit ich diese später mit den Daten aus der Telekomdatei vergleichen kann
 
 
                    string empfänger_Get = words[(int)getstruktur.Empfänger].Trim('"').Replace("+49", "0");/*TrimStart('+').TrimStart('4').TrimStart('9');*/
 
                    string verbunden = words[(int)getstruktur.Verbunden];
 
 
                    string Datum = words[(int)getstruktur.Datum].Trim('"');
 
                    anrufer_get = "0" + words[(int)getstruktur.Anrufer].Trim('"').TrimStart('+').TrimStart('4').TrimStart('9');
 
 
                    string[] Datum_Array1 = words[(int)getstruktur.Datum].Trim('"').Split('.');
                    string[] uhrzeit1 = words[(int)getstruktur.Uhrzeit1].Trim('"').Split(':');
                    string[] uhrzeit2 = words[(int)getstruktur.Uhrzeit2].Trim('"').Split(':');
                    string[] uhrzeit3 = words[(int)getstruktur.Uhrzeit3].Trim('"').Split(':');
                    string count = words[(int)getstruktur.id].Trim('"');
 
                    string uhrzeit_angerufen = uhrzeit1[0] + ":" + uhrzeit1[1] + ":" + uhrzeit1[2];
 
                    if (uhrzeit2.Length < 2)
                    {
                        uhrzeit2 = words[(int)getstruktur.Uhrzeit3].Trim('"').Split(':');
                    }
 
                    string uhrzeit_angenommen = uhrzeit2[0] + ":" + uhrzeit2[1] + ":" + uhrzeit2[2];
                    string uhrzeit_beendet = uhrzeit3[0] + ":" + uhrzeit3[1] + ":" + uhrzeit3[2];
 
                    // eine Datetime erstellt werden um später Datum und Uhrzeit miteinander zu vergleichen
 
                    DateTime uhrzeitget_DT1 = new DateTime(Convert.ToInt32(Datum_Array1[2]), Convert.ToInt32(Datum_Array1[1]), Convert.ToInt32(Datum_Array1[0]),
                    Convert.ToInt16(uhrzeit1[0]), Convert.ToInt16(uhrzeit1[1]), Convert.ToInt16(uhrzeit1[2]));
 
                    DateTime uhrzeitget_DT2 = new DateTime(Convert.ToInt32(Datum_Array1[2]), Convert.ToInt32(Datum_Array1[1]), Convert.ToInt32(Datum_Array1[0]),
                    Convert.ToInt16(uhrzeit2[0]), Convert.ToInt16(uhrzeit2[1]), Convert.ToInt16(uhrzeit2[2]));
 
                    DateTime uhrzeitget_DT3 = new DateTime(Convert.ToInt32(Datum_Array1[2]), Convert.ToInt32(Datum_Array1[1]), Convert.ToInt32(Datum_Array1[0]),
                    Convert.ToInt16(uhrzeit2[0]), Convert.ToInt16(uhrzeit2[1]), Convert.ToInt16(uhrzeit2[2]));
 
 
                    // desweiteren werden 2 leere Dummies erstellt die später für ein gewisses Zeitfenster bei den Uhrzeiten benötigt werden da diese nicht zu 100 % übereinstimmen
 
                    TimeSpan differenz_get_telekom1 = new TimeSpan(0, 0, 0);
                    TimeSpan differenz_get_telekom2 = new TimeSpan(0, 0, 0);
                    TimeSpan differenz_get_telekom3 = new TimeSpan(0, 0, 0);
                    TimeSpan span = new TimeSpan(0, 4, 0);
 
                    // Hat die Uhrzeit und das Datum übereingestimmt sollen die notwendigen Dateien zum Späteren zusammenfügen zurück gegeben werden.
 
                    var data_get = new Data_Klasse_Get
                    {
                        anrufer = "0" + words[(int)getstruktur.Anrufer].Trim('"').TrimStart('+').TrimStart('4').TrimStart('9'),
                        empfänger = "0" + words[(int)getstruktur.Empfänger].Trim('"').TrimStart('+').TrimStart('4').TrimStart('9'),
 
                        Empty = false
                    };
 
                    var air_result = air_getdata(pos_air++, reader_AirDatei, empfänger_Get, uhrzeitget_DT1, uhrzeitget_DT2, uhrzeitget_DT3);
                    anrufer_air = air_result.anrufer;
 
                    var telekom_result = telekom_getdata(pos_telekom++, reader_Telekomdatei, empfänger_Get, uhrzeitget_DT1, uhrzeitget_DT2, uhrzeitget_DT3);
                    var haustelefon_result = haustelefon_getdata(pos_haustelefon, pfad_haustelefon.Text, anrufer_get);
 
                    string tarif = "Keine Daten";
                    string kosten = "Keine Daten";
                    string name_anrufer = "Keine Daten";
                    string dauer = "0.00";
                    string empfänger = data_get.empfänger;
 
                    if (!haustelefon_result.Empty)
                    {
                        name_anrufer = haustelefon_result.haus_name;
                    }
 
                    if (!telekom_result.Empty)
                    {
                        tarif = telekom_result.tarif;
                        dauer = telekom_result.gesprächsdauer;
                        kosten = telekom_result.kosten;
                    }
                    if (air_result.Empty)
                    {
                        anrufer_air = "Keine Daten";
                    }
 
                    using (con = new SqlConnection(connectionstring))
                    {
                        // Hier wird die ID aus der Datenbank (Tabelle Auswertung) mit der ID aus der Getdatei verglichen. Sind beide gleich soll diese übersprungen werden                    
                        con.Open();
                        DataTable table_data = new DataTable();
                        SqlCommand checkid = new SqlCommand("SELECT ID FROM Auswertung WHERE ID = @ID;");
                        checkid.Parameters.AddWithValue("@ID", count);
                        SqlDataAdapter cmd_adapter = new SqlDataAdapter(checkid);
                        cmd_adapter.Fill(table_data);
 
                        // SQL Connection in die Tabelle Auswertung in der die Daten übertragen werden sollen
 
                        cmd = new SqlCommand("INSERT INTO Auswertung(ID,Name,Anrufer_Get,Anrufer_Air,Empfaenger,Uhrzeit_angerufen,Uhrzeit_abgenommen,Uhrzeit_beendet,Datum,Dauer,Tarif,Kosten) VALUES (@ID,@Name,@Anrufer_Get,@Anrufer_Air,@Empfaenger,@Uhrzeit_angerufen,@Uhrzeit_abgenommen,@Uhrzeit_beendet,@Datum,@Dauer,@Tarif,@Kosten)", con);
 
                        cmd.Parameters.AddWithValue("@ID", count);
                        cmd.Parameters.AddWithValue("@Name", name_anrufer);
                        cmd.Parameters.AddWithValue("@Anrufer_Get", anrufer_get);
                        cmd.Parameters.AddWithValue("@Anrufer_Air", anrufer_air);
                        cmd.Parameters.AddWithValue("@Empfaenger", empfänger);
                        cmd.Parameters.AddWithValue("@Datum", Datum);
                        cmd.Parameters.AddWithValue("@Uhrzeit_angerufen", uhrzeit_angerufen);
                        cmd.Parameters.AddWithValue("@Uhrzeit_abgenommen", uhrzeit_angenommen);
                        cmd.Parameters.AddWithValue("@Uhrzeit_beendet", uhrzeit_beendet);
                        cmd.Parameters.AddWithValue("@Dauer", dauer);
                        cmd.Parameters.AddWithValue("@Tarif", tarif);
                        cmd.Parameters.AddWithValue("@Kosten", kosten);
 
                        cmd.ExecuteNonQuery();
                    }
                }
            }
 
        }
 
        private Data_Klasse_Airspeed air_getdata(long pos, StreamReader reader_AirDatei, string empfänger_get, DateTime getDT1, DateTime getDT2, DateTime getDT3)
        {
            long neuepos = pos;
 
            reader_AirDatei.DiscardBufferedData();
            reader_AirDatei.BaseStream.Seek(0, System.IO.SeekOrigin.Begin);
 
            while (reader_AirDatei.EndOfStream == false)
            {
 
                string buffer_air = reader_AirDatei.ReadLine();
                string[] words = buffer_air.Split(',');
                neuepos++;
 
                if (words.Length >= 1)
                {
 
                    string[] empfänger_air_array_SIP = words[(int)airspeedstruktur.Empfänger_SIP].Trim('"').Split('/');
 
                    string empfänger_air1 = words[(int)airspeedstruktur.Empfänger].Trim('"');
                    string empfänger_air2 = words[(int)airspeedstruktur.Empfänger].Trim('"').TrimStart('0');
                    string empfänger_air3 = "";
                    empfänger_air2 = "0" + empfänger_air2;
 
 
                    if (empfänger_air_array_SIP.Length >= 3)
                    {
                        empfänger_air3 = empfänger_air_array_SIP[2].TrimStart('0');
                        empfänger_air3 = "0" + empfänger_air3;
                    }
 
                    if (empfänger_get == empfänger_air1 || empfänger_air2 == empfänger_get || empfänger_get == empfänger_air3)
                    {
                        string DatumUhrzeit1 = words[(int)airspeedstruktur.DatumUndUhrzeit_1].Replace(' ', ',').Replace('-', ',').Trim('"');
                        string DatumUhrzeit2 = words[(int)airspeedstruktur.DatumUndUhrzeit_2].Replace(' ', ',').Replace('-', ',').Trim('"');
                        string DatumUhrzeit3 = words[(int)airspeedstruktur.DatumUndUhrzeit_3].Replace(' ', ',').Replace('-', ',').Trim('"');
 
 
                        // Uhrzeit 2 ist nicht immer belegt , so versuche ich so die Fehlermeldung zu vermeiden indem ich falls sie nicht vorhanden ist mit diesem Datum befühle
 
                        if (DatumUhrzeit2.Length <= 2)
                        {
                            DatumUhrzeit2 = "1980,01,01,00:00:00";
                        }
 
                        // Hier werden Arays erstellt aus deren Werten später die DateTimes zu den 3 verschiedenen Uhrzeiten generiert werden soll
 
                        string[] DatumUhrzeitA1 = DatumUhrzeit1.Split(',');
                        string[] DatumUhrzeitA2 = DatumUhrzeit2.Split(',');
                        string[] DatumUhrzeitA3 = DatumUhrzeit3.Split(',');
 
                        string[] uhrzeitairin1 = DatumUhrzeitA1[3].Split(':');
                        string[] uhrzeitairin2 = DatumUhrzeitA2[3].Split(':');
                        string[] uhrzeitairin3 = DatumUhrzeitA3[3].Split(':');
 
                        DateTime dateT_uhrzeitair1 = new DateTime(Convert.ToInt32(DatumUhrzeitA1[0]), Convert.ToInt32(DatumUhrzeitA1[1]), Convert.ToInt32(DatumUhrzeitA1[2]),
                        Convert.ToInt32(uhrzeitairin1[0]), Convert.ToInt32(uhrzeitairin1[1]), Convert.ToInt32(uhrzeitairin1[2]));
 
                        DateTime dateT_uhrzeitair2 = new DateTime(Convert.ToInt32(DatumUhrzeitA2[0]), Convert.ToInt32(DatumUhrzeitA2[1]), Convert.ToInt32(DatumUhrzeitA2[2]),
                        Convert.ToInt32(uhrzeitairin2[0]), Convert.ToInt32(uhrzeitairin2[1]), Convert.ToInt32(uhrzeitairin2[2]));
 
                        DateTime dateT_uhrzeitair3 = new DateTime(Convert.ToInt32(DatumUhrzeitA3[0]), Convert.ToInt32(DatumUhrzeitA3[1]), Convert.ToInt32(DatumUhrzeitA3[2]),
                        Convert.ToInt32(uhrzeitairin3[0]), Convert.ToInt32(uhrzeitairin3[1]), Convert.ToInt32(uhrzeitairin3[2]));
 
                        TimeSpan differenz_air_get1 = new TimeSpan(0, 0, 0);
                        TimeSpan differenz_air_get2 = new TimeSpan(0, 0, 0);
                        TimeSpan differenz_air_get3 = new TimeSpan(0, 0, 0);
                        TimeSpan span = new TimeSpan(0, 3, 0);
 
                        // und hier soll wieder von der größeren Uhrzeit die kleinere abgezogen werden. Falls die Differenz kleiner als 10 Sekunden so ist die Übereinstimmung richtig
 
                        if (dateT_uhrzeitair1 > getDT1)
                        {
                            differenz_air_get1 = dateT_uhrzeitair1 - getDT1;
                        }
                        if (dateT_uhrzeitair1 < getDT1)
                        {
                            differenz_air_get1 = getDT1 - dateT_uhrzeitair1;
                        }
 
                        if (dateT_uhrzeitair2 > getDT2)
                        {
                            differenz_air_get2 = dateT_uhrzeitair2 - getDT2;
                        }
                        if (dateT_uhrzeitair2 < getDT2)
                        {
                            differenz_air_get2 = getDT2 - dateT_uhrzeitair2;
                        }
 
                        if (dateT_uhrzeitair3 > getDT3)
                        {
                            differenz_air_get3 = dateT_uhrzeitair3 - getDT3;
                        }
                        if (dateT_uhrzeitair3 < getDT3)
                        {
                            differenz_air_get3 = getDT3 - dateT_uhrzeitair3;
                        }
 
                        // falls die Daten übereinstimmen sollen die gewünschten Informationen aus der Air Datei zurückgegeben werden
 
                        if (differenz_air_get1 <= span || differenz_air_get2 <= span || differenz_air_get3 <= span)
                        {
                            Data_Klasse_Airspeed data_air = new Data_Klasse_Airspeed
                            {
                                anrufer = words[(int)airspeedstruktur.Anrufer].Trim('"').TrimStart('+').TrimStart('4').TrimStart('9'),
                                pos = neuepos,
                                Empty = false
                            };
 
                            return data_air;
                        }
                    }
                }
            }
 
            Data_Klasse_Airspeed data_air1 = new Data_Klasse_Airspeed
            {
                Empty = true
            };
            return data_air1;
        }
 
        private Data_Klasse_Telekom telekom_getdata(string path, string empfänger_get, DateTime getDT1, DateTime getDT2, DateTime getDT3)
        {
            Data_Klasse_Telekom data_telekom = new Data_Klasse_Telekom
            {
                Empty = true
            };
 
            string[] lines = File.ReadAllLines(path);
            foreach (string line in lines)
            {
                string[] words = line.Split(';');
                if (words.Length >= 8)
                {
                    string empfänger_telekom = words[(int)telekomstruktur.Empfänger];
 
                    string[] uhrzeitanfang_telekom = words[(int)telekomstruktur.Uhrzeit].Split(':');
                    string datumtelekom = words[(int)telekomstruktur.Datum];
                    string[] datetelekom = words[(int)telekomstruktur.Datum].Split('.');
                    string[] uhrzeitanfangtelekom = words[(int)telekomstruktur.Uhrzeit].Split(':');
                    string gesprächsdauer = words[(int)telekomstruktur.Gesprächsdauer];
                    string kosten = words[(int)telekomstruktur.Kosten];
 
                    if (empfänger_get == empfänger_telekom)
                    {
                        DateTime TelekomDT = new DateTime(Convert.ToInt32(datetelekom[2]), Convert.ToInt32(datetelekom[1]), Convert.ToInt32(datetelekom[0]),
                            Convert.ToInt32(uhrzeitanfangtelekom[0]), Convert.ToInt32(uhrzeitanfangtelekom[1]), Convert.ToInt32(uhrzeitanfangtelekom[2]));
 
 
                        TimeSpan differenz_telekom_get1 = (TelekomDT > getDT1) ? TelekomDT - getDT1 : getDT1 - TelekomDT;
                        TimeSpan differenz_telekom_get2 = (TelekomDT > getDT2) ? TelekomDT - getDT2 : getDT2 - TelekomDT;
                        TimeSpan differenz_telekom_get3 = (TelekomDT > getDT3) ? TelekomDT - getDT3 : getDT3 - TelekomDT;
                        TimeSpan span = new TimeSpan(0, 4, 0);
 
                        if (differenz_telekom_get1 < span || differenz_telekom_get2 < span || differenz_telekom_get3 < span)
                        {
                            data_telekom = new Data_Klasse_Telekom
                            {
                                Datum = words[(int)telekomstruktur.Datum],
                                Uhrzeit = words[(int)telekomstruktur.Uhrzeit],
                                kosten = words[(int)telekomstruktur.Kosten],
                                empfänger = words[(int)telekomstruktur.Empfänger],
                                gesprächsdauer = words[(int)telekomstruktur.Gesprächsdauer],
                                tarif = words[(int)telekomstruktur.Tarif],
                                Empty = false
                            };
 
                            break;
                        }
                    }
                }
            }
 
            return data_telekom;
        }
 
        private Data_Klasse_Haustelefon haustelefon_getdata(long pos, string path, string anrufer_get)
        {
            string[] lines = File.ReadAllLines(path);
 
            var data = new Data_Klasse_Haustelefon
            {
                Empty = true
            };
 
            foreach (string line in lines)
            {
                string[] words = line.Split(',');
                if (words.Length >= 1 && words[(int)haustelefonstruktur.haustelefonnummer] == anrufer_get)
                {
                    data.haus_name = words[(int)haustelefonstruktur.haustelefonname];
                    data.pos = ++pos;
                    data.Empty = false;
                    break;
                }
            }
 
            return data;
        }
    }
}

Comments