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; } } }