コード例 #1
0
        private bool LoadSampleFile(string fileName)
        {
            StreamReader textReader = new StreamReader(fileName);
            CsvParser    parser     = new CsvParser(textReader);

            string[] sampleHeaderRow = null;
            string[] sampleDataRow   = null;
            try
            {
                while (true)
                {
                    sampleHeaderRow = parser.Read();
                    sampleDataRow   = parser.Read();
                    break;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error in sample file");
                return(false);
            }


            SampleHeaderRow = sampleHeaderRow.ToList();
            SampleDataRow   = sampleDataRow.ToList();

            parser.Dispose();
            textReader.Close();

            return(true);
        }
コード例 #2
0
        /// <summary>
        /// パースされたCSVをもとに、List<T/>を変えす。
        /// </summary>
        /// <typeparam name="TCsvType"></typeparam>
        /// <param name="csvPerser">パースされたCSV</param>
        /// <returns>CSVデータ(List<T/>)</returns>
        public List <TCsvType> ReadCsv <TCsvType>(CsvParser csvPerser)
        {
            var list = new CsvReader(csvPerser).GetRecords <TCsvType>().ToList();

            csvPerser.Dispose();

            return(list);
        }
コード例 #3
0
 public void Dispose()
 {
     if (_isDisposed)
     {
         return;
     }
     _parser.Dispose();
     _parser     = null;
     EndOfStream = true;
     _isDisposed = true;
 }
コード例 #4
0
        public void Dispose(bool disposing)
        {
            if (!disposing || _isDisposed)
            {
                return;
            }

            _parser?.Dispose();
            _outStream?.Dispose();
            _isDisposed = true;
        }
コード例 #5
0
        public TrackInfo GetTrackInfo()
        {
            var result = new TrackInfo();

            var handleFinder = Process.Start("openedfilesview\\OpenedFilesView.exe", "/processfilter Music.UI.exe /scomma files.csv");

            handleFinder.WaitForExit();
            var streamReader = File.OpenText("files.csv");
            var csvParser    = new CsvParser(streamReader, CultureInfo.InvariantCulture);

            var row  = csvParser.Read();
            var rows = new List <string[]>();

            while (row != null)
            {
                rows.Add(row);
                row = csvParser.Read();
            }

            foreach (string[] data in rows)
            {
                try
                {
                    if (supportedFileTypes.Contains(data[20], StringComparer.OrdinalIgnoreCase))
                    {
                        var media = TagLib.File.Create(data[1]);

                        result.Title  = media.Tag.Title;
                        result.Artist = media.Tag.AlbumArtists.First() ?? "Unknown Artist";
                        result.Album  = media.Tag.Album ?? "Unknown Album";

                        break;
                    }
                    streamReader.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"{ex.Message} \n{ex.StackTrace}");
                    return(result);
                }
            }
            csvParser.Dispose();
            streamReader.Dispose();
            return(result);
        }
コード例 #6
0
        public static List <List <string> > LoadCSVFile(string fileName, bool firstRowHasHeaders)
        {
            // https://github.com/JoshClose/CsvHelper

            List <List <string> > csvData = new List <List <string> >();

            StreamReader textReader = new StreamReader(fileName);
            CsvParser    parser     = new CsvParser(textReader);

            string[] csvDataRow   = null;
            bool     dropFirstRow = firstRowHasHeaders;

            try
            {
                while (true)
                {
                    csvDataRow = parser.Read();
                    if (csvDataRow == null)
                    {
                        break;
                    }
                    if (!dropFirstRow)
                    {
                        csvData.Add(csvDataRow.ToList());
                    }
                    dropFirstRow = false;
                }
            }
            catch (Exception e)            {
                return(null);
            }

            parser.Dispose();
            textReader.Close();

            return(csvData);
        }
コード例 #7
0
        public static DataTable CSVDataToDataTable(Stream stream, CultureInfo cultureInfo = null)
        {
            if (cultureInfo == null)
            {
                cultureInfo = CultureInfo.InvariantCulture;
            }
            else //check that its not invariant!
            {
                if (cultureInfo == CultureInfo.InvariantCulture)
                {
                    throw new ArgumentException("If cultureInfo is provided it must not be InvariantCulture");
                }
            }

            if (System.Threading.Thread.CurrentThread.CurrentCulture != CultureInfo.InvariantCulture)
            {
                throw new ArgumentException("This method can only be executed when the underlying thread is an InvariantCulture");
            }

            DataTable dataTable = new DataTable();

            //use the csvreader to read in the csv data
            TextReader textReader = new StreamReader(stream);
            CsvParser  parser     = new CsvParser(textReader, cultureInfo);

            parser.Read();
            string[] headerRow = parser.Record;
            for (int i = 0; i < headerRow.Length; i++)
            {
                DataColumn newCol;

                if (headerRow[i] == "SilveRSelected")
                {
                    newCol = new DataColumn(headerRow[i], System.Type.GetType("System.Boolean"));
                }
                else
                {
                    newCol = new DataColumn(headerRow[i], System.Type.GetType("System.String"));
                }

                dataTable.Columns.Add(newCol);
            }


            stream.Seek(0, SeekOrigin.Begin);
            textReader = new StreamReader(stream);

            CsvReader csvReader = new CsvReader(textReader, cultureInfo);

            csvReader.Read();
            csvReader.ReadHeader();
            while (csvReader.Read())
            {
                DataRow row = dataTable.NewRow();
                foreach (DataColumn column in dataTable.Columns)
                {
                    string fieldValue = csvReader.GetField(column.DataType, column.ColumnName).ToString().Trim();

                    if (cultureInfo != null)
                    {
                        fieldValue = fieldValue.Replace(',', cultureInfo.NumberFormat.NumberDecimalSeparator.Single());
                    }

                    row[column.ColumnName] = fieldValue;
                }

                dataTable.Rows.Add(row);
            }

            parser.Dispose();
            csvReader.Dispose();
            textReader.Dispose();
            stream.Dispose();

            return(dataTable);
        }
コード例 #8
0
        private DataTable readDataFile(string filePath)
        {
            DataTable dt = new DataTable();

            StreamReader reader = File.OpenText(filePath);
            var          parser = new CsvParser(reader);

            string[] header = parser.Read();
            if (!(header.Count() > 1))
            {
                if (header[0].Contains("\t"))
                {
                    parser.Configuration.Delimiter = "\t";
                    header = header[0].Split('\t');
                }
            }


            foreach (string field in header)
            {
                dt.Columns.Add(field.Replace("\"", ""), typeof(string));
            }

            while (true)
            {
                try
                {
                    var row = parser.Read();
                    if (row == null)
                    {
                        break;
                    }

                    DataRow dr = dt.NewRow();
                    if (row.Length == 0 || row.Length != dt.Columns.Count)
                    {
                        Debug.WriteLine(row.Length + " " + dt.Columns.Count);
                        return(null);
                    }

                    for (int i = 0; i < row.Length; i++)
                    {
                        if (row[i] == null)
                        {
                            Debug.WriteLine(row);
                        }
                        dr[i] = row[i];
                    }
                    dt.Rows.Add(dr);
                }
                catch (System.NullReferenceException e)
                {
                    Debug.WriteLine(e.Message);
                    throw;
                }
            }
            parser.Dispose();
            reader.Dispose();

            return(dt);
        }
コード例 #9
0
        static void Main(string[] args)
        {
            var wc   = new System.Net.WebClient();
            var path = Path.GetTempFileName();

            wc.DownloadFile("https://docs.google.com/spreadsheets/d/1mLbhSh-STB1OYTK0mmWJM2Wle_9zJemqV88EpnuOC3w/pub?output=csv", path);
            wc.Dispose();

            CsvParser parser = new CsvParser(new StreamReader(path, Encoding.UTF8));

            parser.Configuration.HasHeaderRecord = true;              // ヘッダ行は無い
            parser.Configuration.RegisterClassMap <IAInfoMap>();

            CsvReader     reader = new CsvReader(parser);
            List <IAInfo> list   = reader.GetRecords <IAInfo>().ToList();

            parser.Dispose();
            reader.Dispose();

            File.Delete(path);

            var filename = System.IO.Directory.GetCurrentDirectory() + "/IATableList.txt";

            //書き込むファイルが既に存在している場合は、上書きする
            var sw = new StreamWriter(
                filename,
                false,
                Encoding.UTF8);

            sw.WriteLine("namespace ImprovementArsenalPlugin");
            sw.WriteLine("{");
            sw.WriteLine("\tpublic partial class IATable");
            sw.WriteLine("\t{");
            sw.WriteLine("\t\tpublic static IATable[] List = new IATable[] {");

            foreach (IAInfo record in list)
            {
                string value = "\t\t\tnew IATable { Equip = \"" + record.装備 + "\", Days = new string[] {";
                var    days  = new[] {
                    new { WeekDay = nameof(record.日), Enable = record.日 },
                    new { WeekDay = nameof(record.月), Enable = record.月 },
                    new { WeekDay = nameof(record.火), Enable = record.火 },
                    new { WeekDay = nameof(record.水), Enable = record.水 },
                    new { WeekDay = nameof(record.木), Enable = record.木 },
                    new { WeekDay = nameof(record.金), Enable = record.金 },
                    new { WeekDay = nameof(record.土), Enable = record.土 },
                };
                value += string.Join(",", days.Where(x => "○".Equals(x.Enable)).Select(x => '"' + x.WeekDay + '"'));

                value += "}, ShipName = \"" + record.艦娘 + "\"},";

                sw.WriteLine(value);
            }

            sw.WriteLine("\t\t};");
            sw.WriteLine("\t}");
            sw.WriteLine("}");

            //閉じる
            sw.Close();

            Process.Start(filename);
        }
コード例 #10
0
        public void Load(IExcelService service)
        {
            CsvParser parser            = new CsvParser(new StreamReader(service.InputFileName));
            CsvReader reader            = new CsvReader(parser);
            DataRow   row               = null;
            bool      isTableColCreated = false;
            string    exceptionText     = null;

            try
            {
                int recordCount = 0;
                while (reader.Read())
                {
                    if (!isTableColCreated)
                    {
                        service.Records     = new DataTable();
                        service.ColumnNames = new Dictionary <int, string>();
                        reader.FieldHeaders.ToList().ForEach(c =>
                        {
                            service.Records.Columns.Add(c);
                            service.ColumnNames.Add(recordCount++, c);
                        });
                        recordCount       = 0;
                        isTableColCreated = !isTableColCreated;
                    }

                    if (!string.IsNullOrEmpty(exceptionText))
                    {
                        continue;
                    }
                    row = service.Records.NewRow();
                    for (int columnIndex = 0; columnIndex < reader.CurrentRecord.Length; columnIndex++)
                    {
                        string header = reader.FieldHeaders[columnIndex].Trim();

                        string value = reader.CurrentRecord[columnIndex].Trim();
                        if (value == "" || value.ToLower() == "null")
                        {
                            continue;
                        }
                        row[header] = value;
                    }

                    service.Records.Rows.Add(row);
                }
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
            }
            finally
            {
                reader.Dispose();
                parser.Dispose();
            }

            if (!string.IsNullOrEmpty(exceptionText))
            {
                throw new ApplicationException(exceptionText);
            }
        }
コード例 #11
0
        static void YotogiStage_CreateData()
        {
            //Get the Dictionary
            Dictionary <int, YotogiStage.Data> basicsData = (Dictionary <int, YotogiStage.Data>) typeof(YotogiStage).GetField("basicDatas", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);

            //Create folders if they dont exist
            string mainPath = UTY.gameProjectPath + "\\Mod\\[YotogiAnywhere]\\[NewStages]";

            if (!Directory.Exists(mainPath))
            {
                Directory.CreateDirectory(mainPath);
            }

            if (YotogiAnywhere.newStageIds == null)
            {
                YotogiAnywhere.newStageIds = new List <int>();
            }

            //Get the data in folders
            string[] newStagesDirs = Directory.GetDirectories(mainPath);
            for (int i = 0; i < newStagesDirs.Length; i++)
            {
                DirectoryInfo di        = new DirectoryInfo(newStagesDirs[i]);
                string        stageName = di.Name;

                //Wow this is bad I should have done something better than a bunch of if statements
                if (Directory.Exists(mainPath + "\\" + stageName + "\\[Day]"))
                {
                    if (Directory.Exists(mainPath + "\\" + stageName + "\\[Night]"))
                    {
                        int maxId = -1;
                        YotogiStage.Data stageData = null;

                        //Try to find stage in existing data
                        foreach (KeyValuePair <int, YotogiStage.Data> kvp in basicsData)
                        {
                            if (kvp.Value.uniqueName.Equals(stageName))
                            {
                                stageData = kvp.Value;
                                break;
                            }

                            //Also get the max Id
                            maxId = System.Math.Max(maxId, kvp.Value.id);
                        }

                        //Create new if it does not exist
                        if (stageData == null)
                        {
                            //Increment from max Id
                            maxId += 10;

                            //Add to list of new ones
                            if (!YotogiAnywhere.newStageIds.Contains(maxId))
                            {
                                YotogiAnywhere.newStageIds.Add(maxId);
                                CsvCommonIdManager commonIdManager = (CsvCommonIdManager)typeof(YotogiStage).GetField("commonIdManager", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
                                commonIdManager.idMap.Add(maxId, new KeyValuePair <string, string>(stageName, ""));
                                commonIdManager.nameMap.Add(stageName, maxId);
                                typeof(YotogiStage).GetField("commonIdManager", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, commonIdManager);
                            }

                            //CsvParser is a pain, and the YotogiStage.Data constructor is a pain, so reuse yotogi_stage_list
                            //It wont find the id so it will be ok
                            string    f_strFileName = "yotogi_stage_list.nei";
                            AFileBase afileBase     = GameUty.FileSystem.FileOpen(f_strFileName);
                            CsvParser csvParser     = new CsvParser();
                            csvParser.Open(afileBase);
                            stageData = new YotogiStage.Data(-1, csvParser);

                            //Set id, only field we really need right now
                            typeof(YotogiStage.Data).GetField("id", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, maxId);

                            //Cleanup
                            csvParser.Dispose();
                        }

                        //Get BG and Thumbnail from folders
                        string prefab_bg       = null;
                        string prefab_bg_night = null;

                        //Day
                        if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".asset_bg")).ToList().Count != 0)
                        {
                            prefab_bg = Path.GetFileNameWithoutExtension(new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".asset_bg")).ToList()[0]).Name);
                        }
                        else if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".room")).ToList().Count != 0)
                        {
                            prefab_bg = Path.GetFileNameWithoutExtension(new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".room")).ToList()[0]).Name);
                        }
                        else
                        {
                            UnityEngine.Debug.Log("No.asset_bg or .room [Day] file found for " + stageName);
                        }
                        //Night
                        if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".asset_bg")).ToList().Count != 0)
                        {
                            prefab_bg_night = Path.GetFileNameWithoutExtension(new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".asset_bg")).ToList()[0]).Name);
                        }
                        else if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".room")).ToList().Count != 0)
                        {
                            prefab_bg_night = Path.GetFileNameWithoutExtension(new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".room")).ToList()[0]).Name);
                        }
                        else
                        {
                            UnityEngine.Debug.Log("No.asset_bg or .room [Night] file found for " + stageName);
                        }

                        string thumbnail       = null;
                        string thumbnail_night = null;

                        //Day
                        if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".tex")).ToList().Count != 0)
                        {
                            thumbnail = new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".tex")).ToList()[0]).Name;
                        }
                        else
                        {
                            UnityEngine.Debug.Log("No .tex [Day] thumbnail file found for " + stageName);
                        }
                        //Night
                        if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".tex")).ToList().Count != 0)
                        {
                            thumbnail_night = new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".tex")).ToList()[0]).Name;
                        }
                        else
                        {
                            UnityEngine.Debug.Log("No .tex [Night] thumbnail file found for " + stageName);
                        }

                        if (prefab_bg == null || prefab_bg_night == null || thumbnail == null || thumbnail_night == null)
                        {
                            UnityEngine.Debug.Log("YotogiAnywhere failed to create Location found for " + stageName);
                            break;
                        }


                        //Create a settings json if it doesnt exist
                        if (!File.Exists(mainPath + "\\" + stageName + "/settings.json"))
                        {
                            YotogiStage_Data_Json newSetting = new YotogiStage_Data_Json();
                            File.WriteAllText(mainPath + "\\" + stageName + "/settings.json", Newtonsoft.Json.JsonConvert.SerializeObject(newSetting));
                        }

                        //Settings from Directory
                        typeof(YotogiStage.Data).GetField("uniqueName", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, stageName);
                        typeof(YotogiStage.Data).GetField("drawName", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, stageName);

                        typeof(YotogiStage.Data).GetField("prefabName", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new string[] { prefab_bg, prefab_bg_night });
                        typeof(YotogiStage.Data).GetField("thumbnailName", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new string[] { thumbnail, thumbnail_night });

                        //Some Generic settings we do not worry about
                        typeof(YotogiStage.Data).GetField("sortId", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, stageData.id);

                        typeof(YotogiStage.Data).GetField("drawClubGrade", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, 1);
                        typeof(YotogiStage.Data).GetField("requestClubGrade", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, 1);

                        typeof(YotogiStage.Data).GetField("requestFacilityIds", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new int[] { });

                        //Settings file
                        YotogiStage_Data_Json settings = Newtonsoft.Json.JsonConvert.DeserializeObject <YotogiStage_Data_Json>(File.ReadAllText(mainPath + "\\" + stageName + "/settings.json"));
                        typeof(YotogiStage.Data).GetField("bgmFileName", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, settings.bgm);
                        typeof(YotogiStage.Data).GetField("stageSelectCameraData", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new YotogiStage.Data.Camera(new UnityEngine.Vector3(settings.camera_pos_x, settings.camera_pos_y, settings.camera_pos_z),
                                                                                                                                                                                new UnityEngine.Vector2(settings.camera_rot_x, settings.camera_rot_y),
                                                                                                                                                                                settings.camera_radius));
                        typeof(YotogiStage.Data).GetField("skillSelectcharacterData", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new YotogiStage.Data.Character(new UnityEngine.Vector3(settings.kasuko_x, settings.kasuko_y, settings.kasuko_z),
                                                                                                                                                                                      new UnityEngine.Vector3(settings.kasuko_rot_x, settings.kasuko_rot_y, settings.kasuko_rot_z),
                                                                                                                                                                                      new UnityEngine.Vector2(settings.skill_x, settings.skill_y)));
                        typeof(YotogiStage.Data).GetField("skillSelectLightData", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new YotogiStage.Data.Light(new UnityEngine.Vector3(settings.light_x, settings.light_y, settings.light_z), settings.light_intensity));

                        //Update the entry
                        basicsData[stageData.id] = stageData;
                    }
                    else
                    {
                        UnityEngine.Debug.Log("YotogiAnywhere: YotogiStage_CreateData Missing: " + mainPath + "\\" + stageName + "\\[Night]");
                    }
                }
                else
                {
                    UnityEngine.Debug.Log("YotogiAnywhere: YotogiStage_CreateData Missing: " + mainPath + "\\" + stageName + "\\[Day]");
                }
            }

            //Update entire dictionary as precaution
            typeof(YotogiStage).GetField("basicDatas", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, basicsData);
        }