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