131 lines
3.5 KiB
C#
131 lines
3.5 KiB
C#
using SewerStammGen.Shared.Enum;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace WWTech_KanalSchnittstelle.Exporter.Kandis
|
|
{
|
|
public static class ExporterHelper
|
|
{
|
|
public static Dictionary<string, int> LineSize = new Dictionary<string, int>()
|
|
{
|
|
{ "KANSCH4.0",557 },
|
|
{ "KANSCH6.0",2041 },
|
|
{ "KANHAL4.0",530 },
|
|
{ "KANHAL6.0",2167 }
|
|
};
|
|
|
|
|
|
|
|
}
|
|
internal abstract class KANDIS_Exporter : IDisposable
|
|
{
|
|
public enum kType
|
|
{
|
|
HALTUNG,
|
|
SCHACHT
|
|
}
|
|
|
|
private StreamWriter sw;
|
|
char[] zeile;
|
|
|
|
protected string Zeile => new string(zeile);
|
|
|
|
public KANDIS_Exporter(string filename, EExportType exportType, kType kType)
|
|
{
|
|
string version = string.Empty;
|
|
switch (kType)
|
|
{
|
|
case kType.HALTUNG:
|
|
{
|
|
switch (exportType)
|
|
{
|
|
case EExportType.KANDIS4: version = "KANHAL4.0"; break;
|
|
case EExportType.KANDIS6: version = "KANHAL6.0"; break;
|
|
default: throw new NotImplementedException();
|
|
}
|
|
}
|
|
break;
|
|
case kType.SCHACHT:
|
|
{
|
|
switch (exportType)
|
|
{
|
|
case EExportType.KANDIS4: version = "KANSCH4.0"; break;
|
|
case EExportType.KANDIS6: version = "KANSCH6.0"; break;
|
|
default: throw new NotImplementedException();
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (!ExporterHelper.LineSize.ContainsKey(version))
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
int maxzeilen = ExporterHelper.LineSize[version];
|
|
|
|
sw = new StreamWriter(filename, append: false, Encoding.GetEncoding("ISO-8859-1"));
|
|
|
|
WriteHeader(version);
|
|
zeile = new char[maxzeilen];
|
|
ClearLine();
|
|
}
|
|
|
|
private void WriteHeader(string header)
|
|
{
|
|
sw.WriteLine(header);
|
|
sw.Flush();
|
|
}
|
|
|
|
private void ClearLine()
|
|
{
|
|
for (int i = 0; i < zeile.Length; i++)
|
|
{
|
|
zeile[i] = ' ';
|
|
}
|
|
}
|
|
|
|
protected void WriteLineInFile()
|
|
{
|
|
sw.WriteLine(Zeile);
|
|
sw.Flush();
|
|
ClearLine();
|
|
}
|
|
|
|
protected void WriteContent(Tuple<uint, uint> spalten, string content)
|
|
{
|
|
uint start = spalten.Item1 - 1;
|
|
uint ende = spalten.Item2 -1;
|
|
|
|
uint length = (ende+1) - start;
|
|
if(content.Length > length)
|
|
{
|
|
content = content.Substring(0, (int)length);
|
|
//Debugger.Break();
|
|
//throw new Exception("Inhalt des Feldes ist zu lang");
|
|
}
|
|
|
|
int counter = 0;
|
|
for (uint i = start; i < (content.Length + start); i++)
|
|
{
|
|
zeile[i] = content[counter];
|
|
counter++;
|
|
}
|
|
}
|
|
|
|
protected void CloseStream()
|
|
{
|
|
sw.Close();
|
|
}
|
|
public void Dispose()
|
|
{
|
|
sw.Close();
|
|
sw.Dispose();
|
|
}
|
|
}
|
|
}
|