Full CSV Loader for Planets, store in DB, do CSV Conversion
This commit is contained in:
parent
1abf67fdb3
commit
bf84d168d2
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"dotnet.defaultSolution": "Stars Assistant.sln"
|
"dotnet.defaultSolution": "Stars Assistant.sln",
|
||||||
|
"csharp.preview.improvedLaunchExperience": true
|
||||||
}
|
}
|
@ -1,46 +1,229 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Globalization;
|
||||||
using CSV = CsvHelper.Configuration.Attributes;
|
using CSV = CsvHelper.Configuration.Attributes;
|
||||||
|
|
||||||
namespace net.nehmer.sa.model;
|
namespace net.nehmer.sa.model;
|
||||||
|
|
||||||
public class Planet
|
public class Planet
|
||||||
{
|
{
|
||||||
[Key, CSV.Index(1)]
|
[Key, CSV.Index(0)]
|
||||||
public required string Name { get; set; }
|
public required string Name { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(1)]
|
||||||
public string? Owner { get; set; }
|
public string? Owner { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(2)]
|
||||||
public string? StarbaseType { get; set; }
|
public string? StarbaseType { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(3)]
|
||||||
public int ReportAge { get; set; } = 0;
|
public int ReportAge { get; set; } = 0;
|
||||||
|
|
||||||
|
[CSV.Index(4)]
|
||||||
public int? Population { get; set; }
|
public int? Population { get; set; }
|
||||||
|
|
||||||
|
[CSV.Ignore()]
|
||||||
public int? Value { get; set; }
|
public int? Value { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(5)]
|
||||||
|
public string CSVValue {
|
||||||
|
set {
|
||||||
|
if ( value.Length >= 2
|
||||||
|
&& int.TryParse(value[..^1], out int result))
|
||||||
|
{
|
||||||
|
Value = result;
|
||||||
|
} else {
|
||||||
|
Value = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[CSV.Index(7)]
|
||||||
public int? Mines { get; set; }
|
public int? Mines { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(8)]
|
||||||
public int? Factories { get; set; }
|
public int? Factories { get; set; }
|
||||||
|
|
||||||
|
[CSV.Ignore()]
|
||||||
public decimal? DefPercent { get; set; }
|
public decimal? DefPercent { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(9)]
|
||||||
|
public string CSVDefPercent {
|
||||||
|
set {
|
||||||
|
if ( value.Length >= 2
|
||||||
|
&& Decimal.TryParse(value[..^1], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
|
||||||
|
{
|
||||||
|
DefPercent = result;
|
||||||
|
} else {
|
||||||
|
DefPercent = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[CSV.Index(10)]
|
||||||
public int? SurfaceIronium { get; set; }
|
public int? SurfaceIronium { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(11)]
|
||||||
public int? SurfaceBoranium { get; set; }
|
public int? SurfaceBoranium { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(12)]
|
||||||
public int? SurfaceGermanium { get; set; }
|
public int? SurfaceGermanium { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(13)]
|
||||||
public int? MRIronium { get; set; }
|
public int? MRIronium { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(14)]
|
||||||
public int? MRBoranium { get; set; }
|
public int? MRBoranium { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(15)]
|
||||||
public int? MRGermanium { get; set; }
|
public int? MRGermanium { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(16)]
|
||||||
public int? MCIronium { get; set; }
|
public int? MCIronium { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(17)]
|
||||||
public int? MCBoranium { get; set; }
|
public int? MCBoranium { get; set; }
|
||||||
public int? MCGErmanium { get; set; }
|
|
||||||
public int? IroniumMC { get; set; }
|
[CSV.Index(18)]
|
||||||
|
public int? MCGrmanium { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(19)]
|
||||||
public int? Resources { get; set; }
|
public int? Resources { get; set; }
|
||||||
|
|
||||||
|
[CSV.Ignore()]
|
||||||
public decimal? Gravity { get; set; }
|
public decimal? Gravity { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(20)]
|
||||||
|
public string CSVGravity {
|
||||||
|
set {
|
||||||
|
if ( value.Length >= 2
|
||||||
|
&& Decimal.TryParse(value[..^1], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
|
||||||
|
{
|
||||||
|
Gravity = result;
|
||||||
|
} else {
|
||||||
|
Gravity = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[CSV.Ignore()]
|
||||||
public decimal? Temperature { get; set; }
|
public decimal? Temperature { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(21)]
|
||||||
|
public string CSVTemperature {
|
||||||
|
set {
|
||||||
|
if ( value.Length >= 3
|
||||||
|
&& Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
|
||||||
|
{
|
||||||
|
Temperature = result;
|
||||||
|
} else {
|
||||||
|
Temperature = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[CSV.Ignore()]
|
||||||
public decimal? Radiation { get; set; }
|
public decimal? Radiation { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(22)]
|
||||||
|
public string CSVRadiation {
|
||||||
|
set {
|
||||||
|
if ( value.Length >= 3
|
||||||
|
&& Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
|
||||||
|
{
|
||||||
|
Radiation = result;
|
||||||
|
} else {
|
||||||
|
Radiation = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[CSV.Ignore()]
|
||||||
public decimal? GravityOrig { get; set; }
|
public decimal? GravityOrig { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(20)]
|
||||||
|
public string CSVGravityOrig {
|
||||||
|
set {
|
||||||
|
if ( value.Length >= 2
|
||||||
|
&& Decimal.TryParse(value[..^1], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
|
||||||
|
{
|
||||||
|
GravityOrig = result;
|
||||||
|
} else {
|
||||||
|
GravityOrig = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[CSV.Ignore()]
|
||||||
public decimal? TemperatureOrig { get; set; }
|
public decimal? TemperatureOrig { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(24)]
|
||||||
|
public string CSVTemperatureOrig {
|
||||||
|
set {
|
||||||
|
if ( value.Length >= 3
|
||||||
|
&& Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
|
||||||
|
{
|
||||||
|
TemperatureOrig = result;
|
||||||
|
} else {
|
||||||
|
TemperatureOrig = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[CSV.Ignore()]
|
||||||
public decimal? RadiationOrig { get; set; }
|
public decimal? RadiationOrig { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(25)]
|
||||||
|
public string CSVRadiationOrig {
|
||||||
|
set {
|
||||||
|
if ( value.Length >= 3
|
||||||
|
&& Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
|
||||||
|
{
|
||||||
|
RadiationOrig = result;
|
||||||
|
} else {
|
||||||
|
RadiationOrig = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[CSV.Ignore()]
|
||||||
public int? MaxTerraforming { get; set; }
|
public int? MaxTerraforming { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(26)]
|
||||||
|
public string CSVMaxTerraforming {
|
||||||
|
set {
|
||||||
|
if ( value.Length >= 2
|
||||||
|
&& int.TryParse(value[..^1], out int result))
|
||||||
|
{
|
||||||
|
MaxTerraforming = result;
|
||||||
|
} else {
|
||||||
|
MaxTerraforming = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[CSV.Index(27)]
|
||||||
public int? CapacityPercent { get; set; }
|
public int? CapacityPercent { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(28)]
|
||||||
public int? ScanRange { get; set; }
|
public int? ScanRange { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(29)]
|
||||||
public int? PenScanRange { get; set; }
|
public int? PenScanRange { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(30)]
|
||||||
public int? Driver { get; set; }
|
public int? Driver { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(31)]
|
||||||
public int? DriverWarp { get; set; }
|
public int? DriverWarp { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(32)]
|
||||||
public string? RouteTarget { get; set; }
|
public string? RouteTarget { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(33)]
|
||||||
public int? GateRange { get; set; }
|
public int? GateRange { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(34)]
|
||||||
public int? GateMass { get; set; }
|
public int? GateMass { get; set; }
|
||||||
|
|
||||||
|
[CSV.Index(35)]
|
||||||
public int? PctDamage { get; set; }
|
public int? PctDamage { get; set; }
|
||||||
}
|
}
|
@ -1,7 +1,12 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using CsvHelper.Configuration;
|
||||||
|
using CsvHelper;
|
||||||
|
|
||||||
using net.nehmer.sa.model;
|
using net.nehmer.sa.model;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
using var db = new StarsDatabase("stars.sqlite");
|
using var db = new StarsDatabase("stars.sqlite");
|
||||||
|
|
||||||
@ -11,6 +16,22 @@ db.Database.EnsureCreated();
|
|||||||
// Note: This sample requires the database to be created before running.
|
// Note: This sample requires the database to be created before running.
|
||||||
Console.WriteLine($"Database path: {db.DbPath}.");
|
Console.WriteLine($"Database path: {db.DbPath}.");
|
||||||
|
|
||||||
|
var config = CsvConfiguration.FromAttributes<Planet>(CultureInfo.InvariantCulture);
|
||||||
|
config.Delimiter = "\t";
|
||||||
|
config.Escape = '\0';
|
||||||
|
config.MissingFieldFound = null;
|
||||||
|
|
||||||
|
using (var reader = new StreamReader("/home/torben/goingth/GOINGTH.p1", Encoding.Latin1))
|
||||||
|
using (var csv = new CsvReader(reader, config))
|
||||||
|
{
|
||||||
|
List<Planet> records = csv.GetRecords<Planet>().ToList();
|
||||||
|
foreach (Planet p in records)
|
||||||
|
{
|
||||||
|
db.Add(p);
|
||||||
|
}
|
||||||
|
db.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// Create
|
// Create
|
||||||
Console.WriteLine("Inserting a new blog");
|
Console.WriteLine("Inserting a new blog");
|
||||||
|
Loading…
Reference in New Issue
Block a user