Files
SewerGenerator/WWTech_KanalSchnittstelle/Importer/CSVImporter.cs
Damian Wessels 2492f3bfab CSV Importer erweitert.
HAUSREV6.0 Implementiert
2023-07-04 20:16:24 +02:00

116 lines
3.8 KiB
C#

using SewerStammGen.Shared.Domain;
using SewerStammGen.Shared.Enum;
using Shared.Contracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WWTech_KanalSchnittstelle.Importer
{
internal enum EKennung
{
DECKEL = 1,
SOHLE = 2
}
public class CSVImporter : IImport
{
private string[]? input;
private readonly Projekt projekt;
public CSVImporter(int projektID)
{
projekt = new Projekt() { Id = projektID };
}
private decimal parseKoordinate(string input)
{
decimal result = 0m;
input = string.Format("{0:0.000}", input).Replace('.', ',');
if(!decimal.TryParse(input, out result))
{
throw new Exception("Konnte koordinate nicht parsen");
}
return result;
}
public List<Schacht> LoadSchaechte(string filename, string vermesser)
{
List<Schacht> result = new List<Schacht>();
Dictionary<string, EEntwaeserung> entwaesserungKennung = new Dictionary<string, EEntwaeserung>()
{
{ "1100", EEntwaeserung.Schmutzwasser },
{ "1200", EEntwaeserung.Mischwasser },
{ "1300", EEntwaeserung.Regenwasser },
{ "3110", EEntwaeserung.Schmutzwasser },
{ "3210", EEntwaeserung.Mischwasser },
{ "3310", EEntwaeserung.Regenwasser }
};
if(!File.Exists(filename))
{
throw new FileNotFoundException(filename);
}
input = File.ReadAllLines(filename);
int zeile = -1;
foreach (string line in input)
{
zeile++;
if (zeile == 0) continue;
string[] parsed = line.Split(new char[] { ';' });
string objektbezeichnung = parsed[0];
string objektname = objektbezeichnung.Substring(0, objektbezeichnung.Length - 2);
EKennung kennung = (EKennung)Convert.ToInt32(objektbezeichnung.Substring(objektbezeichnung.Length - 2, 2));
bool neueSchacht = false;
Schacht? schacht = result.FindLast(x => x.Objektbezeichnung.Equals(objektname) && x.Projekt.Id.Equals(projekt.Id));
if (schacht == null)
{
schacht = new Schacht();
neueSchacht = true;
}
if(kennung == EKennung.DECKEL)
{
schacht.DeckelRechtsWert = parseKoordinate(parsed[1]);
schacht.DeckelHochWert = parseKoordinate(parsed[2]);
schacht.DeckelHoehe = parseKoordinate(parsed[3]);
}
if(kennung == EKennung.SOHLE)
{
schacht.SohlRechtsWert = parseKoordinate(parsed[1]);
schacht.SohlHochWert = parseKoordinate(parsed[2]);
schacht.SohlHoehe = parseKoordinate(parsed[3]);
}
if (parsed.Length >= 4)
{
schacht.Entwaesserung = entwaesserungKennung[parsed[4]];
}
else
{
schacht.Entwaesserung = EEntwaeserung.Schmutzwasser;
}
schacht.Projekt = projekt;
schacht.Vermesser = vermesser;
schacht.AufnahmeDatum = DateTime.Now.ToShortDateString();
if (neueSchacht)
{
schacht.Objektbezeichnung = objektname;
result.Add(schacht);
}
}
return result;
}
}
}