public MemoryStream SelectData(string column, string data) { IEnumerable <Row> selection = csv.Rows.Where(i => i.Values[csv.GetColumnIndex(column)] == data); MemoryStream csvStream = new MemoryStream(); StreamWriter sw = new StreamWriter(csvStream); foreach (Row r in selection) { CsvWriter.RawWriteLine(r.Values, sw); } return(csvStream); }
//Accepts up to one command-line argument; A custom-named Settings.ini static void Main(string[] args) { //If the user provides a Settings.ini if (args.Length > 0) { customINI = true; IO.File.Copy(args[0], appPath + "/PerfGenCustSettings.ini"); custININame = "/PerfGenCustSettings.ini"; } //Setup logging of the console consoleLogger(); //INI Initialisation Trace.WriteLine("---INI DATA BEGIN:---\n"); if (customINI) { iniLoader(custININame); } else { iniLoader("/Settings.ini"); } //Start the writer IO.StreamWriter writer; try { //Data from our CSVs MutableDataTable team = DataTable.New.ReadCsv(teamCSV); MutableDataTable driver = DataTable.New.ReadCsv(driverCSV); #region Column Indexes teamNameColInt = team.GetColumnIndex(teamNameCol); engineColInt = team.GetColumnIndex(engineCol); racePowerColInt = team.GetColumnIndex(racePowerCol); qualPowerColInt = team.GetColumnIndex(qualPowerCol); reliabilityColInt = team.GetColumnIndex(reliabilityCol); gearsColInt = team.GetColumnIndex(gearsCol); treadColInt = team.GetColumnIndex(treadCol); rimColInt = team.GetColumnIndex(rimCol); driverColInt = driver.GetColumnIndex(driverCol); if (driverNumbers) { driverNumColInt = driver.GetColumnIndex(driverNumCol); } raceGripColInt = driver.GetColumnIndex(raceGripCol); raceGripVarColInt = driver.GetColumnIndex(raceGripVarCol); qualGripColInt = driver.GetColumnIndex(qualGripCol); qualGripVarColInt = driver.GetColumnIndex(qualGripVarCol); if (driverNat) { driverNatColInt = driver.GetColumnIndex(driverNatCol); } if (driverTag) { driverTagColInt = driver.GetColumnIndex(driverTagCol); } #endregion //Indexes to cycle after each write. int teamIndex = 0, driver1Index = 0, driver2Index = 1; //If no driver numbers are provided, fill them in, 1-22 int driver1Number = 1, driver2Number = 2; //Faux Country - If country codes are not provided, but driver tags *are*, we need a Faux country to use string fauxCountry = "UN"; //Looking for custom Performance File name if (perfFileName.Length > 0) { writer = new IO.StreamWriter(perfFileName + ".txt"); } else { writer = new IO.StreamWriter("Performance.txt"); } //Begin writing writer.WriteLine("** Grand Prix 4 Performance File - Generated by GP4PerfGen v1.3 **"); writer.WriteLine("[File]"); writer.WriteLine("Version=213"); //For every team foreach (Row row in team.Rows) { #region Team if (teamIndex < 10) { writer.WriteLine("[Team #0" + teamIndex + "]"); } else { writer.WriteLine("[Team #" + teamIndex + "]"); } //Team name and Engine writer.WriteLine("Name=" + team.Columns[teamNameColInt].Values[teamIndex] + "," + team.Columns[engineColInt].Values[teamIndex] + ""); //Race BHP, Qual BHP, Reliability writer.WriteLine("Performance=" + team.Columns[racePowerColInt].Values[teamIndex] + "," + team.Columns[qualPowerColInt].Values[teamIndex] + "," + team.Columns[reliabilityColInt].Values[teamIndex] + ""); #endregion #region Driver 1 writer.Write("First Driver="); if (driverNumbers) { writer.Write(driver.Columns[driverNumColInt].Values[driver1Index]); } else { writer.Write(driver1Number); } writer.Write("," + driver.Columns[driverColInt].Values[driver1Index] + "," + driver.Columns[raceGripColInt].Values[driver1Index] + "," + driver.Columns[raceGripVarColInt].Values[driver1Index] + "," + driver.Columns[qualGripColInt].Values[driver1Index] + "," + driver.Columns[qualGripVarColInt].Values[driver1Index]); //If a driver tag is specified, a Nationality must be as well. //If we don't have a nationality, this will force use our Faux Country and then write the tag. if (driverTag) { if (driverNat) { writer.Write("," + driver.Columns[driverNatColInt].Values[driver1Index]); } else { writer.Write("," + fauxCountry); } writer.Write("," + driver.Columns[driverTagColInt].Values[driver1Index] + "\r\n"); } //Otherwise, we can just write the Nationality else if (driverNat) { writer.Write("," + driver.Columns[driverNatColInt].Values[driver1Index] + "\r\n"); } else { writer.Write("\r\n"); } #endregion #region Driver 2 writer.Write("Second Driver="); if (driverNumbers) { writer.Write(driver.Columns[driverNumColInt].Values[driver2Index]); } else { writer.Write(driver2Number); } writer.Write("," + driver.Columns[driverColInt].Values[driver2Index] + "," + driver.Columns[raceGripColInt].Values[driver2Index] + "," + driver.Columns[raceGripVarColInt].Values[driver2Index] + "," + driver.Columns[qualGripColInt].Values[driver2Index] + "," + driver.Columns[qualGripVarColInt].Values[driver2Index]); if (driverTag) { if (driverNat) { writer.Write("," + driver.Columns[driverNatColInt].Values[driver2Index]); } else { writer.Write("," + fauxCountry); } writer.Write("," + driver.Columns[driverTagColInt].Values[driver2Index] + "\r\n"); } else if (driverNat) { writer.Write("," + driver.Columns[driverNatColInt].Values[driver2Index] + "\r\n"); } else { writer.Write("\r\n"); } #endregion //Increment indexes teamIndex++; driver1Index = driver1Index + 2; driver2Index = driver2Index + 2; driver1Number = driver1Number + 2; driver2Number = driver2Number + 2; } //Reset the Team Index counter to 0 teamIndex = 0; //Write out each Team's Gear counts. writer.WriteLine("\r\n[Gears]"); foreach (Row row in team.Rows) { if (teamIndex < 10) { writer.Write("Team #0" + teamIndex + "="); } else { writer.Write("Team #" + teamIndex + "="); } writer.Write(team.Columns[gearsColInt].Values[teamIndex] + "\r\n"); teamIndex++; } //Write out the list of provided texture names writer.WriteLine("\r\n[TyreTextureNames]"); writer.WriteLine("Name #00=" + tex00); writer.WriteLine("Name #01=" + tex01); writer.WriteLine("Name #02=" + tex02); writer.WriteLine("Name #03=" + tex03); writer.WriteLine("Name #04=" + tex04); writer.WriteLine("Name #05=" + tex05); writer.WriteLine("Name #06=" + tex06); writer.WriteLine("Name #07=" + tex07); writer.WriteLine("Name #08=" + tex08); writer.WriteLine("Name #08=" + tex09); writer.WriteLine("Name #09=" + tex10); writer.WriteLine("Name #10=" + tex11); writer.WriteLine("Name #11=" + tex12); //Reset the Team Index counter to 0 teamIndex = 0; //Write out each Team's Tread textures. writer.WriteLine("\r\n[TreadTextures]"); foreach (Row row in team.Rows) { if (teamIndex < 10) { writer.Write("Team #0" + teamIndex + "="); } else { writer.Write("Team #" + teamIndex + "="); } writer.Write(team.Columns[treadColInt].Values[teamIndex] + "\r\n"); teamIndex++; } //Reset the Team Index counter to 0 teamIndex = 0; //Write out each Team's Rim textures. writer.WriteLine("\r\n[WheelTextures]"); foreach (Row row in team.Rows) { if (teamIndex < 10) { writer.Write("Team #0" + teamIndex + "="); } else { writer.Write("Team #" + teamIndex + "="); } writer.Write(team.Columns[rimColInt].Values[teamIndex] + "\r\n"); teamIndex++; } //Close the writer writer.Close(); //Clean-up if necessary if (customINI) { IO.File.Delete(appPath + "/PerfGenCustSettings.ini"); } } catch (IndexOutOfRangeException) { Trace.WriteLine("An index was out of range!"); Trace.WriteLine("Have you got enough Drivers to fill your Teams?"); } catch (IO.FileNotFoundException ex) { Trace.WriteLine("A file was missing."); Trace.WriteLine(ex.Message); } Trace.WriteLine("-----Ending Session at " + DateTime.Now + "-----\n"); }