using System.Collections.Generic;
public static void Main()
Action<string> W = m => Console.WriteLine(m);
W("--- Car/Maker Data ---");
var cars = ProcessCars(MyData.Vehicle);
W($"car count: {cars.Count}");
var makers = ProcessMakers(MyData.Makers);
W($"maker count: {makers.Count}");
group car by car.Manufacturer.ToUpper() into manufacturer
.GroupBy(c => c.Manufacturer.ToUpper())
foreach(var c in g.OrderByDescending(c => c.Combined))
W($"\t- {c.ShortSummary}");
public static List<Car> ProcessCars(string csvData)
return csvData.Split('\n')
.Where(line => line.Length > 10)
public static List<Maker> ProcessMakers(string csvData)
return csvData.Split('\n')
.Where(line => line.Length > 5)
public static class Excel
public static int A2I(string alpha)
int a = alpha[0] - A + 1;
public string Summary {get {return $"{Manufacturer,-15} {Name,-20} {Year,4} {Displacement,4} {Cyliders,2} ({City},{Highway},{Combined})"; }}
public string ShortSummary {get {return $"{Name,-20} {Year,4} {Displacement,4} {Cyliders,2} ({City},{Highway},{Combined})"; }}
public string MakeModel {get {return $"{Manufacturer} {Name}"; }}
public int Year {get; set;}
public string Manufacturer {get; set;}
public string Name {get; set;}
public double Displacement {get; set;}
public int Cyliders {get; set;}
public int City {get; set;}
public int Highway {get; set;}
public int Combined {get; set;}
public static class CarExtensions
public static IEnumerable<Car> ToCar(this IEnumerable<string> source)
foreach (var line in source)
Year = int.Parse( C[Excel.A2I("BL")]),
Manufacturer = C[Excel.A2I("AU")],
Name = C[Excel.A2I("AV")],
Displacement = double.Parse( C[Excel.A2I("X")]),
Cyliders = int.Parse( C[Excel.A2I("W")]),
City = int.Parse( C[Excel.A2I("E")]),
Highway = int.Parse( C[Excel.A2I("AI")]),
Combined = int.Parse( C[Excel.A2I("P")]),
public string Name { get; set; }
public string Headquarters { get; set; }
public int Year { get; set; }
public static class MakerExtensions
public static IEnumerable<Maker> ToMaker(this IEnumerable<string>source)
foreach (var line in source)
Name = C[Excel.A2I("A")],
Headquarters = C[Excel.A2I("B")],
Year = int.Parse( C[Excel.A2I("C")]),
public static class UrlData
public static string Get()
Action<string> W = m => Console.WriteLine(m);
var url = "https://www.fueleconomy.gov/ws/rest/vehicle/emissions/31873";
using (var wc = new WebClient())
contents = wc.DownloadString(url);
XmlDocument doc = new XmlDocument();
string jsonText = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.Indented);
public static class MyData
public static string Makers = @"
Aston Martin Lagonda Ltd,UK,2016
Mercedes-Benz,Germany,2016
Pagani Automobili S.p.A.,Italy,2016
HYUNDAI MOTOR COMPANY,South Korea,2016
KIA MOTORS CORPORATION,South Korea,2016
Mitsubishi Motors Corporation,Japan,2016
Rolls-Royce Motor Cars Limited,UK,2016
public static string Vehicle = @"coreA,highway08,highway08U,highwayA08,highwayA08U,highwayCD,highwayE,highwayUF,hlv,hpv,id,lv2,lv4,make,model,mpgData,phevBlended,pv2,pv4,range,rangeCity,rangeCityA,rangeHwy,rangeHwyA,trany,UCity,UCityA,UHighway,UHighwayA,VClass,year,youSaveSpend,guzzler,trans_dscr,tCharger,sCharger,atvType,fuelType2,rangeA,evMotor,mfrCode,c240Dscr,charge240b,c240bDscr,createdOn,modifiedOn,startStop,phevCity,phevHwy,phevComb
15.695714285714287,0.0,0.0,0.0,19,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,423.1904761904762,21,0.0,0,0.0,0.0,0.0,0.0,4,2.0,Rear-Wheel Drive,9011,(FFS),-1,2050,0,Regular,Regular Gasoline,-1,-1,25,0.0,0,0.0,0.0,0.0,0.0,0,0,1,0,0,Alfa Romeo,Spider Veloce 2000,Y,false,0,0,0,0.0,0.0,0.0,0.0,Manual 5-spd,23.3333,0.0,35.0,0.0,Two Seaters,1985,-2250,,,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
16.4805,0.0,0.0,0.0,17,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,444.35,20,0.0,0,0.0,0.0,0.0,0.0,6,3.8,Front-Wheel Drive,4400,(FFS),-1,2150,0,Regular,Regular Gasoline,-1,-1,25,0.0,0,0.0,0.0,0.0,0.0,0,0,10024,14,0,Buick,Riviera,N,false,99,0,0,0.0,0.0,0.0,0.0,Automatic 4-spd,21.0,0.0,35.0,0.0,Midsize Cars,2016,-2750,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
18.311666666666667,0.0,0.0,0.0,15,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,493.72222222222223,18,0.0,0,0.0,0.0,0.0,0.0,8,4.6,Front-Wheel Drive,4620,(FFS),-1,2900,0,Premium,Premium Gasoline,-1,-1,23,0.0,0,0.0,0.0,0.0,0.0,0,0,10025,15,0,Cadillac,Eldorado,N,false,100,0,0,0.0,0.0,0.0,0.0,Automatic 4-spd,18.0,0.0,32.0,0.0,Midsize Cars,2016,-6500,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
19.388823529411766,0.0,0.0,0.0,15,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,522.7647058823529,17,0.0,0,0.0,0.0,0.0,0.0,8,4.9,Front-Wheel Drive,4640,(FFS),-1,3100,0,Premium,Premium Gasoline,-1,-1,23,0.0,0,0.0,0.0,0.0,0.0,0,0,10026,15,0,Cadillac,Eldorado,Y,false,100,0,0,0.0,0.0,0.0,0.0,Automatic 4-spd,18.0,0.0,32.0,0.0,Midsize Cars,2016,-7500,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
18.311666666666667,0.0,0.0,0.0,15,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,493.72222222222223,18,0.0,0,0.0,0.0,0.0,0.0,8,4.6,Front-Wheel Drive,4620,(FFS),-1,2900,0,Premium,Premium Gasoline,-1,-1,23,0.0,0,0.0,0.0,0.0,0.0,0,0,10027,0,14,Cadillac,Seville,Y,false,0,106,0,0.0,0.0,0.0,0.0,Automatic 4-spd,18.0,0.0,32.0,0.0,Midsize Cars,2016,-6500,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
19.388823529411766,0.0,0.0,0.0,15,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,522.7647058823529,17,0.0,0,0.0,0.0,0.0,0.0,8,4.9,Front-Wheel Drive,4640,(FFS),-1,3100,0,Premium,Premium Gasoline,-1,-1,23,0.0,0,0.0,0.0,0.0,0.0,0,0,10028,0,14,Cadillac,Seville,N,false,0,106,0,0.0,0.0,0.0,0.0,Automatic 4-spd,18.0,0.0,32.0,0.0,Midsize Cars,2016,-7500,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
15.695714285714287,0.0,0.0,0.0,18,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,423.1904761904762,21,0.0,0,0.0,0.0,0.0,0.0,4,2.2,Front-Wheel Drive,4122,(FFS),-1,2050,0,Regular,Regular Gasoline,-1,-1,26,0.0,0,0.0,0.0,0.0,0.0,0,0,10029,15,16,Chevrolet,Lumina,N,false,95,100,0,0.0,0.0,0.0,0.0,Automatic 3-spd,23.0,0.0,37.0,0.0,Midsize Cars,2016,-2250,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
16.4805,0.0,0.0,0.0,17,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,444.35,20,0.0,0,0.0,0.0,0.0,0.0,6,3.1,Front-Wheel Drive,4117,(FFS),-1,2150,0,Regular,Regular Gasoline,-1,-1,25,0.0,0,0.0,0.0,0.0,0.0,0,0,10073,14,16,Oldsmobile,Cutlass Supreme,N,false,97,100,0,0.0,0.0,0.0,0.0,Automatic 3-spd,21.0,0.0,35.0,0.0,Midsize Cars,2016,-2750,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
16.4805,0.0,0.0,0.0,17,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,444.35,20,0.0,0,0.0,0.0,0.0,0.0,6,3.1,Front-Wheel Drive,4118,(FFS),-1,2150,0,Regular,Regular Gasoline,-1,-1,27,0.0,0,0.0,0.0,0.0,0.0,0,0,10074,14,16,Oldsmobile,Cutlass Supreme,Y,false,97,100,0,0.0,0.0,0.0,0.0,Automatic 4-spd,21.0,0.0,38.0,0.0,Midsize Cars,2016,-2750,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
18.311666666666667,0.0,0.0,0.0,15,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,493.72222222222223,18,0.0,0,0.0,0.0,0.0,0.0,6,3.4,Front-Wheel Drive,4120,(FFS),-1,2400,0,Regular,Regular Gasoline,-1,-1,24,0.0,0,0.0,0.0,0.0,0.0,0,0,10075,14,16,Oldsmobile,Cutlass Supreme,N,false,97,100,0,0.0,0.0,0.0,0.0,Automatic 4-spd,19.0,0.0,33.0,0.0,Midsize Cars,2016,-4000,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
18.311666666666667,0.0,0.0,0.0,15,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,493.72222222222223,18,0.0,0,0.0,0.0,0.0,0.0,6,3.4,Front-Wheel Drive,4119,(FFS),-1,2400,0,Regular,Regular Gasoline,-1,-1,24,0.0,0,0.0,0.0,0.0,0.0,0,0,10076,14,16,Oldsmobile,Cutlass Supreme,N,false,97,100,0,0.0,0.0,0.0,0.0,Manual 5-spd,18.8889,0.0,34.0,0.0,Midsize Cars,2016,-4000,,SIL,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
16.4805,0.0,0.0,0.0,17,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,444.35,20,0.0,0,0.0,0.0,0.0,0.0,6,3.8,Front-Wheel Drive,4400,(FFS),-1,2150,0,Regular,Regular Gasoline,-1,-1,25,0.0,0,0.0,0.0,0.0,0.0,0,0,10077,14,0,Oldsmobile,Toronado,N,false,99,0,0,0.0,0.0,0.0,0.0,Automatic 4-spd,21.0,0.0,35.0,0.0,Midsize Cars,1993,-2750,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
15.695714285714287,0.0,0.0,0.0,19,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,423.1904761904762,21,0.0,0,0.0,0.0,0.0,0.0,4,2.5,Front-Wheel Drive,2410,(FFS),-1,2050,0,Regular,Regular Gasoline,-1,-1,24,0.0,0,0.0,0.0,0.0,0.0,0,0,10078,0,14,Plymouth,Acclaim,N,false,0,97,0,0.0,0.0,0.0,0.0,Automatic 3-spd,24.0,0.0,34.0,0.0,Midsize Cars,2016,-2250,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
14.330869565217391,0.0,0.0,0.0,21,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,386.39130434782606,23,0.0,0,0.0,0.0,0.0,0.0,4,2.5,Front-Wheel Drive,2420,(FFS),-1,1850,0,Regular,Regular Gasoline,-1,-1,26,0.0,0,0.0,0.0,0.0,0.0,0,0,10079,0,14,Plymouth,Acclaim,N,false,0,97,0,0.0,0.0,0.0,0.0,Automatic 3-spd,26.0,0.0,36.0,0.0,Midsize Cars,2016,-1250,,CLKUP,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0
25.354615384615386,0.0,0.0,0.0,12,0.0,0,0.0,0.0,0.0,0.0,-1,-1,0.0,683.6153846153846,13,0.0,0,0.0,0.0,0.0,0.0,6,4.9,Rear-Wheel Drive,3702,(FFS),-1,3300,0,Regular,Regular Gasoline,-1,-1,15,0.0,0,0.0,0.0,0.0,0.0,0,0,1008,0,0,Ford,E150 Club Wagon,N,false,0,0,0,0.0,0.0,0.0,0.0,Automatic 3-spd,15.0,0.0,20.0,0.0,Vans,1985,-8500,,,,,,,,,,,0.0,,Tue Jan 01 00:00:00 EST 2013,Tue Jan 01 00:00:00 EST 2013,,0,0,0";