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);
        }
Exemple #2
0
        //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");
        }