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); }
/// <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); }
public void Dispose() { if (_isDisposed) { return; } _parser.Dispose(); _parser = null; EndOfStream = true; _isDisposed = true; }
public void Dispose(bool disposing) { if (!disposing || _isDisposed) { return; } _parser?.Dispose(); _outStream?.Dispose(); _isDisposed = true; }
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); }
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); }
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); }
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); }
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); }
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); } }
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); }