public static void CreatConfigFile(Object selectObj, string writePath) { string fileName = selectObj.name; string className = fileName; //创建.csv文件到指定位置 StreamWriter sw = new StreamWriter(Application.dataPath + writePath + className + ".cs"); //写入命名空间 sw.WriteLine("using UnityEngine;\nusing System.Collections;"); sw.WriteLine("//幻世界 " + System.DateTime.Now.ToString()); sw.WriteLine("public partial class" + " " + className + " : GameConfigDataBase"); sw.WriteLine("{"); string filePath = AssetDatabase.GetAssetPath(selectObj); //解析csv文件 CsvStreamReader csr = new CsvStreamReader(filePath); for (int colNum = 1; colNum < csr.ColCount + 1; colNum++) { string filedName = csr[1, colNum]; string filedType = csr[2, colNum]; sw.WriteLine("\t" + "public" + " " + filedType + " " + filedName + ";"); } sw.WriteLine("\t" + "protected override string getFilePath()"); sw.WriteLine("\t" + "{"); sw.WriteLine("\t\t" + "return" + "\"" + fileName + "\";"); sw.WriteLine("\t" + "}"); sw.WriteLine("}"); sw.Flush(); sw.Close(); AssetDatabase.Refresh(); }
public void SingleSpaceLine() { // Arrange string data = "asdf,qwerty" + Environment.NewLine + " "; Encoding encoding = Encoding.UTF8; Stream stream = new MemoryStream(encoding.GetBytes(data)); CsvStreamReader reader = new CsvStreamReader(stream, encoding); string expectedRecord1 = "asdf"; string expectedRecord2 = "qwerty"; string expectedRecord3 = " "; // Act string actualRecord1 = reader.ReadField(); Assert.IsFalse(reader.EndOfRecord); string actualRecord2 = reader.ReadField(); Assert.IsTrue(reader.EndOfRecord); string actualRecord3 = reader.ReadField(); Assert.IsTrue(reader.EndOfRecord); // Assert Assert.IsTrue(reader.EndOfStream); Assert.AreEqual(expectedRecord1, actualRecord1); Assert.AreEqual(expectedRecord2, actualRecord2); Assert.AreEqual(expectedRecord3, actualRecord3); }
public override void Init() { //CsvStreamReader csv = // new CsvStreamReader("Change.csv"); CsvStreamReader csv = new CsvStreamReader("C:\\Users\\woopqww111\\Desktop\\Change.csv"); int MaxCol = csv.ColCount; int MaxRow = csv.RowCount; TextCostDiamond = GetText("TextCostDiamond"); TextGetVIT = GetText("TextGetVIT"); TextTimes = GetText("TextTimes"); if (GetCol("VIT") != -2) { TextGetVIT.text = csv[MaxRow - 1, GetCol("VIT")]; Debug.Log(TextGetVIT.text); } Debug.Log("没有相应的数据传出"); if (GetCol("Diamond") != -2) { TextCostDiamond.text = csv[rows, GetCol("Diamond")]; Debug.Log(TextCostDiamond.text); } else { Debug.Log("没有相应的数据传出"); } PanelManager.me.RefreshAll(); }
void InitCmd(List <string> filestr, Socket soc) { DataFormLst = new List <DataTable>(); CSVData = new CsvStreamReader(); dgShowLst = new List <DataGridView>(); SocClient = soc; //获取监控数据 dataformLst 填充 GetPlcDataTableFromFile(filestr); //监控第一个列表数据 if (dataFormLst.Count > 0) { SetPlcReadDMData(dataFormLst[0]); } SetSocManager(); //监控通讯 WatchCommTimer = new System.Timers.Timer(Constant.XJRestartTimeOut); //这里1.5 秒别改 加到常量里 工控机性能不行 //测试先隐藏 WatchCommTimer.Enabled = false; WatchCommTimer.AutoReset = true; WatchCommTimer.Elapsed += new System.Timers.ElapsedEventHandler(WatchTimerEvent); }
static void Main(string[] args) { var v1 = new ValueObject("-2147483648"); Console.WriteLine(v1.IntegerValue); var sw = new Stopwatch(); sw.Start(); //var t = new SplitFormts.Values.ValueLazyObject("0.123e2"); //Console.WriteLine(t.DoubleValue); Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); using (var sr = new CsvStreamReader("KEN_ALL.CSV", CsvReadMode.UseEscape)) { foreach (var ans in sr.Enumerator) { for (int i = 0; i < ans.Count; ++i) { Console.Write($"{ans[i].ToString()},"); } Console.WriteLine(); } } /* * using (var sr = CsvStreamReader.FromString(@"""1 * 2""""4"", 5, 678")) { * Console.WriteLine(sr.ReadLine()); * } */ sw.Stop(); Console.WriteLine("{0}s.", sw.Elapsed.TotalSeconds); }
public override string Execute(StringTemplateItem template) { string file = PathUtility.ParseSpecialFoldersNames(this.File, ParseSpecialFolderOption.WildCardToRealPath); string[] values = new string[0]; StringBuilder sb = new StringBuilder(); if (Utils.IsFileOrDirectory(file) == Utils.FileOrDirectory.File) { using (CsvStreamReader reader = new CsvStreamReader(file)) { reader.Separator = ','; while (!reader.EndOfCsvStream) // Do not use EndOfStream { string line = reader.ReadLine(); values = Utils.SplitEscaped(line, reader.Separator, '"'); template.IsLastCommand = (reader.EndOfCsvStream && this.IsLastCommand); sb.Append(template.Format(line, this.Data, values)); } reader.Close(); } } return(sb.ToString()); }
void CreatConfigFile() { string fileName = selectObj.name; string className = fileName; StreamWriter sw = new StreamWriter(Application.dataPath + writePath + className + ".cs"); sw.WriteLine("using UnityEngine;\nusing System.Collections;\n"); sw.WriteLine("public partial class " + className + ":GameConfigDataBase"); sw.WriteLine("{\n"); string filePath = AssetDatabase.GetAssetPath(selectObj); CsvStreamReader csv = new CsvStreamReader(filePath); for (int i = 1; i < csv.ColCount + 1; i++) { string fieldname = csv[1, i]; string fieldtype = csv[2, i]; sw.WriteLine("\tpublic " + fieldtype + " " + fieldname + ";"); } sw.WriteLine("\t protected override string getFilePath()"); sw.WriteLine("\t" + "{"); // filePath=filePath.Replace("Assets/Resources/",""); // filePath=filePath.Substring(0,filePath.LastIndexOf('.')); sw.WriteLine("\t\t" + "return " + "\"" + fileName + "\";"); sw.WriteLine("\t" + "}"); sw.WriteLine("}"); sw.Flush(); sw.Close(); AssetDatabase.Refresh(); }
private void button7_Click(object sender, EventArgs e) { //duplicateCSVOpenFile.InitialDirectory = "d:\\"; duplicateCSVOpenFile.Filter = "csv file|*.csv"; if (duplicateCSVOpenFile.ShowDialog() == DialogResult.OK) { fileName = duplicateCSVOpenFile.FileName; tbCsvPath.Text = duplicateCSVOpenFile.FileName; duplicateFileName.Text = fileName; //inputFileName.Text = fileName; //DataTable csvDt = new DataTable(); //folder = fileName.Substring(0, fileName.LastIndexOf('\\')); CsvStreamReader read = new CsvStreamReader(fileName); if (read.RowCount == 0) { MessageBox.Show("空文件"); return; } else { Console.WriteLine("最大行==" + read.RowCount); duplicateDt = read[1, read.RowCount, 1, read.ColCount]; MessageBox.Show("导入成功,共导入" + duplicateDt.Rows.Count + "条数据"); } } else { fileName = ""; MessageBox.Show("请选择文件!"); } }
private static bool ConvertCsv(string inputFile, string outputFile) { if (Path.GetExtension(inputFile) != ".csv") { return(false); } bool bResult = true; try { CsvStreamReader csvReader = new CsvStreamReader(inputFile, Encoding.Default, true); bResult &= csvReader.LoadCsvFile(); string strTxtName = GetFileName(inputFile); string strOutputTxtName = m_strTxtPath + "/" + strTxtName + ".txt"; CTxtWriter txtWriter = new CTxtWriter(csvReader, strOutputTxtName, strTxtName); bResult &= txtWriter.WriteTxtFile(); if (bResult) { m_dictOutputTxt.Add(strTxtName, "Assets/MyResources/outputtxt/" + strTxtName + ".txt"); string strOutputScriptName = outputFile + "/Assets/Scripts/StaticData/ScriptObject/" + CScriptWriter.GetScriptName(strTxtName) + ".cs"; CScriptWriter scriptWriter = new CScriptWriter(csvReader, strOutputScriptName, strTxtName); bResult &= scriptWriter.WriteScriptFile(); } } catch (Exception ex) { Debug.LogError("导入表" + System.IO.Path.GetFileName(inputFile) + "失败:" + ex.Message); bResult = false; } return(bResult); }
public void TestUtils() { string _file = Path.Combine(new DirectoryInfo(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName, "data.csv"); int _sampleRows = 20; using (CsvStreamReader _reader = new CsvStreamReader(_file)) { bool _succes = CsvUtils.GetCsvSeparator(_reader, out char _separator, _sampleRows); _reader.Position = 0; string[] _header = CsvUtils.CsvHeader(_reader, _separator); _reader.Position = 0; List <CsvColumnInfo> _schema = CsvUtils.GetCsvSchema(_reader, _sampleRows).ToList(); _reader.Position = 0; while (!_reader.EndOfCsvStream) { List <string> _values = _reader.ReadCsvLine().ToList(); } } }
public static void CreateConfigAsset <T>() where T : ConfigAssetBase { ConfigAssetBase asset = ScriptableObject.CreateInstance <T>() as ConfigAssetBase; string configName = asset.GetConfigName(); string assetPathAndName = "Assets/WorkAssets/ConfigAsset/" + configName + ".asset"; if (File.Exists(assetPathAndName)) { File.Delete(assetPathAndName); } string filePath = Application.dataPath + "/WorkAssets/ConfigText/" + configName + ".csv"; CsvStreamReader reader = new CsvStreamReader(filePath, System.Text.Encoding.UTF8); if (reader.RowCount < 1) { Debug.LogError("CreateConfigAsset " + configName + " reader.RowCount < 1"); return; } asset.ReadFromCSV(reader); AssetDatabase.CreateAsset(asset, assetPathAndName); AssetDatabase.SaveAssets(); EditorUtility.FocusProjectWindow(); }
public void TestNotEnoughtItems() { using (var reader = new CsvStreamReader <TestModel>(StreamHelper.GenerateStream("name,type,cost,id,date\nClaws,Attachment,10,\"34.5"))) { reader.AsEnumerable().ToList(); } }
public IEnumerator LoadDataAllAndroid() { string dataPath = Application.streamingAssetsPath + "/Data"; //List<string> lstDataFiles = new List<string>(); //Utils.GetDir(dataPath, "*.csv", ref lstDataFiles); string[] files = { "server_config_client", "actor_info", "command_id", "command_set" }; List <string> lstDataFiles = files.Select(file => dataPath + "/" + file + ".csv").ToList(); Debug.Log($"ScvDataManager LoadDataAllAndroid Info - {lstDataFiles.Count} data file found! directory:{dataPath}"); foreach (var fullname in lstDataFiles) { int index = fullname.LastIndexOf('/'); int index2 = fullname.LastIndexOf('.'); string nakedName = fullname.Substring(index + 1, index2 - index - 1); var www = new WWW(fullname); yield return(www); if (www.isDone && www.error == null) { Debug.Log($"ScvDataManager LoadDataAllAndroid - file:{fullname}"); MemoryStream ms = new MemoryStream(www.bytes); CsvStreamReader csv = new CsvStreamReader(fullname, ms, System.Text.Encoding.UTF8); _liStreamReaders.Add(nakedName, csv); } else if (www.error != null) { Debug.LogError($"CsvDataManaer LoadDataAll Android Error - {www.error} - url:{fullname}"); } } }
/// <summary> /// 如果用户需要重新制定读取一些D区 M区的话可以先设置保存读取PLC 内容的文件 /// 读取后生成命令 /// </summary> public void SetPlcReadDMData(string filename) { if (CSVData != null) { CSVData.Dispose(); CSVData = null; } CSVData = new CsvStreamReader(); string s = Path.GetExtension(filename); if (File.Exists(filename) && (Path.GetExtension(filename).Equals(Constant.CSVFileEX))) { CSVData.FileName = filename; } //确认表格 //这个要隔离出来 方便以后可以单独调用 针对用户更改读取内容 if (CSVData.CheckCSVFile(Constant.PLCstrCol)) { dataForm = CSVData.OpenCSV(CSVData.FileName); if (dataForm != null && dataForm.Rows.Count > 0) { PackCmdReadDMDataOut(dataForm); //在建立连接的时候 切换表格数据源 } } //GC.Collect(); //GC.WaitForPendingFinalizers(); }
public static void CreatConfigFile(Object selectObj, string writePath) { string fileName = selectObj.name; string className = fileName; StreamWriter sw = new StreamWriter(Application.dataPath + writePath + "/" + className + "Source.cs"); sw.WriteLine("using UnityEngine;"); sw.WriteLine("using System.Collections;\n"); sw.WriteLine("public partial class " + className + " : GameConfigDataBase"); sw.WriteLine("{"); string filePath = AssetDatabase.GetAssetPath(selectObj); CsvStreamReader csr = new CsvStreamReader(filePath); for (int colNum = 1; colNum < csr.ColCount + 1; colNum++) { string fieldName = csr[1, colNum]; string fieldType = csr[2, colNum]; sw.WriteLine("\t" + "public " + fieldType + " " + fieldName + ";" + ""); } sw.WriteLine("\n"); sw.WriteLine("\t" + "protected override string GetFilePath ()"); sw.WriteLine("\t" + "{"); sw.WriteLine("\t\t" + "return " + "\"" + fileName + "\";"); sw.WriteLine("\t" + "}"); sw.WriteLine("}"); sw.Flush(); sw.Close(); AssetDatabase.Refresh(); }
/// <summary> /// Method is meant to deal with reading csv files from the system. /// </summary> /// <param name="path">The file path to the csv file that needs to be parsed.</param> /// <param name="options">The options that should be sent off to the stream.</param> /// <typeparam name="TModel">The model the parser needs to turn into.</typeparam> /// <returns>The list of objects that the parser comes back at.</returns> public static List <TModel> ParseFile <TModel>(string path, CsvStreamOptions options) where TModel : class, new() { using (var reader = new CsvStreamReader <TModel>(path, options)) { return(reader.AsEnumerable().ToList()); } }
/// <summary> /// Method is meant to parse a csv string. /// </summary> /// <param name="csv">The csv string that needs to be parsed.</param> /// <param name="options">The options that should be sent off to the stream.</param> /// <typeparam name="TModel">The model the parser needs to turn into.</typeparam> /// <returns>The list of objects that the parser comes back at.</returns> public static List <TModel> Parse <TModel>(string csv, CsvStreamOptions options) where TModel : class, new() { using (var reader = new CsvStreamReader <TModel>(GenerateStream(csv), options)) { return(reader.AsEnumerable().ToList()); } }
public ProtoExporter() { _csvReader = new CsvStreamReader(); _excelReader = new ExcelReader(); _protoStr = "syntax = \"proto3\";\n\npackage Data;\n\n"; _serializeStream = new MemoryStream(); _tempStream = new MemoryStream(); }
public void SetSelector(PickInfo pickInfo) { ClearCommands(); GameRoomManager.Instance.CommandManager.CurrentExecuter = pickInfo; //从“command_set”表格中读取对应于该单位的指令菜单集 CsvStreamReader CommandSet = CsvDataManager.Instance.GetTable("command_set"); if (CommandSet == null) { return; } string strCmdSet = ""; string toggleRootName = ""; if (pickInfo.CurrentCity != null) { if (pickInfo.CurrentCity.OwnerId == GameRoomManager.Instance.CurrentPlayer.TokenId) // 只有是自己的城市,才会出现[命令菜单] { strCmdSet = CommandSet.GetValue(2001, "CommandSet"); } toggleRootName = "城市"; } else if (pickInfo.CurrentActor != null) { var av = pickInfo.CurrentActor; if (av.OwnerId == GameRoomManager.Instance.CurrentPlayer.TokenId) // 只有是自己的部队,才会出现[命令菜单] { strCmdSet = CommandSet.GetValue(av.ActorInfoId, "CommandSet"); } CsvStreamReader csv = CsvDataManager.Instance.GetTable("actor_info"); toggleRootName = csv.GetValue(av.ActorInfoId, "Name"); } else if (pickInfo.CurrentCell != null) { HexResource res = pickInfo.CurrentCell.Res; if (res.GetAmount(res.ResType) > 0) { string[] resNames = { "木材", "粮食", "铁矿" }; toggleRootName = $"{resNames[(int) res.ResType]}:{res.GetLevel(res.ResType)}"; } else if (pickInfo.CurrentCell.IsUnderwater) { toggleRootName = "水"; } else {// Sand-0; Grass-1; Mud-2; Stone-3; Snow-4 string[] terrainNames = { "沙漠", "草原", "沃土", "山区", "雪地" }; toggleRootName = terrainNames[(int)pickInfo.CurrentCell.TerrainTypeIndex]; } } int countCmd = LoadCommandMenu(strCmdSet); //gameObject.SetActive(countCmd > 0); _toggleText.text = toggleRootName; gameObject.SetActive(true); }
public CTxtWriter(CsvStreamReader csvReader, string outputFile, string strName) { this.m_csvReader = csvReader; this.m_strOutputFile = outputFile; this.m_strName = strName; if (File.Exists(m_strOutputFile)) { File.Delete(m_strOutputFile); } }
void dataLoad(string fileName) { CsvStreamReader op = new CsvStreamReader(); if (File.Exists(fileName)) { dtData = op.OpenCSV(fileName); dgv.DataSource = dtData; } }
public void TestNoDefaults() { using (var reader = new CsvStreamReader <SecondTestModel>(StreamHelper.GenerateStream("Claws,,10,\"34.5\",03/27/1987"), new CsvStreamOptions() { AllowDefaults = false, ParseHeaders = false, DataRow = 0 })) { reader.AsEnumerable().ToList(); } }
/// <summary> /// Reads and returns the next line from the file. /// </summary> /// <returns>The read line.</returns> public LazyCsvLine ReadLine() { if (Reader == null) { Reader = new CsvStreamReader(File, Options); Reader.StreamReader.ReadLine(); // discard headers } return(new LazyCsvLine(Reader.StreamReader.ReadLine(), HeaderDictionary, LineSlack, Options.HasFlag(LazyCsvFileOptions.PreventLineReallocation))); }
public override void Import(PwDatabase pwStorage, Stream sInput, IStatusLogger slLogger) { StreamReader sr = new StreamReader(sInput, Encoding.Default); string strData = sr.ReadToEnd(); sr.Close(); sInput.Close(); // Fix broken newlines strData = strData.Replace("\r\r\n", "\r\n"); CsvStreamReader csv = new CsvStreamReader(strData, false); while (true) { string[] v = csv.ReadLine(); if (v == null) { break; } if (v.Length == 0) { continue; } PwEntry pe = new PwEntry(true, true); pwStorage.RootGroup.AddEntry(pe, true); pe.Strings.Set(PwDefs.TitleField, new ProtectedString( pwStorage.MemoryProtection.ProtectTitle, v[0])); int p = 1; while ((p + 1) < v.Length) { string strMapped = ImportUtil.MapNameToStandardField(v[p], true); string strKey = (string.IsNullOrEmpty(strMapped) ? v[p] : strMapped); string strValue = v[p + 1]; p += 2; if ((strKey.Length == 0) && (strValue.Length == 0)) { continue; } AppendToString(pe, strKey, strValue); } if ((p < v.Length) && !string.IsNullOrEmpty(v[p])) { AppendToString(pe, PwDefs.NotesField, v[p]); } } }
public void SimpleCSVParserParrallel() { using (var reader = new CsvStreamReader <DataModel>("PackageAssets.csv", new CsvStreamOptions() { RemoveEmptyEntries = true })) { var entries = reader.AsParallel() .ToList(); } }
public void TestReader() { string file = Path.Combine(new DirectoryInfo(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName, "data.csv"); using (CsvStreamReader _reader = new CsvStreamReader(file)) { while (!_reader.EndOfCsvStream) { List <string> _values = _reader.ReadCsvLine().ToList(); } } }
public void ProcessLargeFile() { using (var reader = new CsvStreamReader <LargeModel>("large.csv", new CsvStreamOptions() { ParseHeaders = false, RowDelimiter = "\n" })) { var count = 0; Parallel.ForEach(reader.AsEnumerable(), (x, state, index) => { count++; }); } }
public void TestStringParser() { using (var reader = new CsvStreamReader <TestModel>(StreamHelper.GenerateStream("name,type,cost,id,date\r\nClaws,Attachment,10,\"34.5\",03/27/1987"))) { var result = reader.AsEnumerable().FirstOrDefault(); Assert.AreEqual(result.Name, "Claws"); Assert.AreEqual(result.Type, TestType.Attachment); Assert.AreEqual(result.Cost, 10); Assert.AreEqual(result.Id, 34.5); Assert.AreEqual(result.Date, DateTime.Parse("03/27/1987")); } }
/// <summary> /// Initializes a new instance of the <see cref="LazyCsvFile"/> class. /// </summary> /// <param name="file">The file containing the CSV to read.</param> /// <param name="lineSlack">The amount of slack space for each line.</param> /// <param name="options">The reader options.</param> public LazyCsvFile(string file, int lineSlack, LazyCsvFileOptions options) { File = file; LineSlack = lineSlack; Options = options; using (var csv = new CsvStreamReader(file, options)) { HeaderDictionary = csv.StreamReader.ReadLine().Split(',') .Select((x, i) => new KeyValuePair <string, int>(x, i)) .ToDictionary(x => x.Key, x => x.Value); } }
public void SaveOut(string path) { //--第一行是要取出的数据-- CsvStreamReader reader = CsvStreamReader.CreateReader(OutPutFile, Encoding.GetEncoding("UTF-8")); List <string> dataFilterList = new List <string>(); dataFilterList.Add(IDLabel); for (int i = 1; i <= reader.ColCount; i++) { string data = reader[1, i]; dataFilterList.Add(data); } List <InfoObject> table = new List <InfoObject>(); List <string> sectionList = LniUtils.ReadAllSection(FilePath); foreach (var section in sectionList) { List <string> datas = new List <string>(); foreach (var dataFilter in dataFilterList) { if (dataFilter == IDLabel) { datas.Add(section); } else { //引号会丢失...貌似没问题? string value = INIHelper.ReadString(section, dataFilter, "", FilePath); datas.Add(value); } //Console.WriteLine(value); } table.Add(new InfoObject(section, datas)); } StringBuilder csv = new StringBuilder(); foreach (var f in dataFilterList) { csv.Append(f); csv.Append(","); } csv = csv.Remove(csv.Length - 1, 1);//最后的逗号 csv.AppendLine(); foreach (var infoObject in table) { csv.AppendLine(infoObject.GetCsv()); } File.WriteAllText(path, csv.ToString()); }
public override void Import(PwDatabase pwStorage, Stream sInput, IStatusLogger slLogger) { StreamReader sr = new StreamReader(sInput, Encoding.Default); string strData = sr.ReadToEnd(); sr.Close(); // Fix broken newlines strData = strData.Replace("\r\r\n", "\r\n"); CsvStreamReader csv = new CsvStreamReader(strData, false); while(true) { string[] v = csv.ReadLine(); if(v == null) break; if(v.Length == 0) continue; PwEntry pe = new PwEntry(true, true); pwStorage.RootGroup.AddEntry(pe, true); pe.Strings.Set(PwDefs.TitleField, new ProtectedString( pwStorage.MemoryProtection.ProtectTitle, v[0])); int p = 1; while((p + 1) < v.Length) { string strMapped = ImportUtil.MapNameToStandardField(v[p], true); string strKey = (string.IsNullOrEmpty(strMapped) ? v[p] : strMapped); string strValue = v[p + 1]; p += 2; if((strKey.Length == 0) && (strValue.Length == 0)) continue; AppendToString(pe, strKey, strValue); } if((p < v.Length) && !string.IsNullOrEmpty(v[p])) AppendToString(pe, PwDefs.NotesField, v[p]); } }
public void op_ReadEntry_whenLineBreak() { using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine("A,B,C"); writer.WriteLine("1A,\"Line1"); writer.WriteLine("Line2\nLine3\",1C"); writer.Flush(); stream.Position = 0; using (var reader = new CsvStreamReader(stream)) { var actual = reader.ReadEntry(); Assert.Equal(4, reader.LineNumber); Assert.Equal(1, reader.EntryNumber); Assert.Equal("1A", actual["A"]); Assert.Equal("Line1" + Environment.NewLine + "Line2" + Environment.NewLine + "Line3", actual["B"]); Assert.Equal("1C", actual["C"]); } } } }
public override void Import(PwDatabase pwStorage, Stream sInput, IStatusLogger slLogger) { StreamReader sr = new StreamReader(sInput, Encoding.Default); string strData = sr.ReadToEnd(); sr.Close(); CsvStreamReader csv = new CsvStreamReader(strData, true); Dictionary<string, PwGroup> dictGroups = new Dictionary<string, PwGroup>(); while(true) { string[] vLine = csv.ReadLine(); if(vLine == null) break; if(vLine.Length == 0) continue; // Skip empty line if(vLine.Length == 5) continue; // Skip header line if(vLine.Length != 34) { Debug.Assert(false); continue; } string strType = vLine[0].Trim(); if(strType.Equals("Is Template", StrUtil.CaseIgnoreCmp)) continue; if(strType.Equals("1")) continue; // Skip template string strGroup = vLine[2].Trim(); PwGroup pg; if(strGroup.Length == 0) pg = pwStorage.RootGroup; else { if(dictGroups.ContainsKey(strGroup)) pg = dictGroups[strGroup]; else { pg = new PwGroup(true, true, strGroup, PwIcon.Folder); pwStorage.RootGroup.AddGroup(pg, true); dictGroups[strGroup] = pg; } } PwEntry pe = new PwEntry(true, true); pg.AddEntry(pe, true); string strTitle = vLine[1].Trim(); if(strTitle.Length > 0) ImportUtil.AppendToField(pe, PwDefs.TitleField, strTitle, pwStorage); for(int i = 0; i < 10; ++i) { string strKey = vLine[(i * 3) + 3].Trim(); string strValue = vLine[(i * 3) + 4].Trim(); if((strKey.Length == 0) || (strValue.Length == 0)) continue; string strMapped = ImportUtil.MapNameToStandardField(strKey, true); if(string.IsNullOrEmpty(strMapped)) strMapped = strKey; ImportUtil.AppendToField(pe, strMapped, strValue, pwStorage); } string strNotesPre = pe.Strings.ReadSafe(PwDefs.NotesField); string strNotes = vLine[33].Trim(); if(strNotes.Length > 0) { if(strNotesPre.Length == 0) ImportUtil.AppendToField(pe, PwDefs.NotesField, strNotes, pwStorage); else pe.Strings.Set(PwDefs.NotesField, new ProtectedString( ((pwStorage == null) ? false : pwStorage.MemoryProtection.ProtectNotes), strNotesPre + Environment.NewLine + Environment.NewLine + strNotes)); } } }
public void op_ReadEntry_whenUnixLF() { using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine("A,B\n1A,1B"); writer.Flush(); stream.Position = 0; using (var reader = new CsvStreamReader(stream)) { var actual = reader.ReadEntry(); Assert.Equal(2, reader.LineNumber); Assert.Equal(1, reader.EntryNumber); Assert.Equal("1A", actual["A"]); Assert.Equal("1B", actual["B"]); } } } }
public void op_ReadEntry_whenColumnsCtor() { var headers = new[] { "A", "B" }; using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine("1A,1B"); writer.Flush(); stream.Position = 0; using (var reader = new CsvStreamReader(stream, headers)) { var actual = reader.ReadEntry(); Assert.Equal("A,B", reader.Header); Assert.Equal(1, reader.LineNumber); Assert.Equal(1, reader.EntryNumber); Assert.Equal("1A", actual["A"]); Assert.Equal("1B", actual["B"]); } } } }
public void op_ReadEntry_whenTrailingNewLine() { using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine("A,B"); writer.WriteLine("1A,1B"); writer.WriteLine(string.Empty); writer.Flush(); stream.Position = 0; using (var reader = new CsvStreamReader(stream)) { reader.ReadEntry(); var actual = reader.ReadEntry(); Assert.Equal(3, reader.LineNumber); Assert.Equal(1, reader.EntryNumber); Assert.Null(actual); } } } }
public void op_ReadEntry_whenMissingColumnItem() { using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine("A,B,C"); writer.WriteLine("1,2"); writer.Flush(); stream.Position = 0; using (var reader = new CsvStreamReader(stream)) { // ReSharper disable AccessToDisposedClosure Assert.Throws<FormatException>(() => reader.ReadEntry()); // ReSharper restore AccessToDisposedClosure } } } }
public void op_ReadEntry_whenEmbeddedLeadingAndTrailingSpaces() { using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine(" A , B "); writer.WriteLine("\" 1A \", 1B "); writer.Flush(); stream.Position = 0; using (var reader = new CsvStreamReader(stream)) { var actual = reader.ReadEntry(); Assert.Equal(2, reader.LineNumber); Assert.Equal(1, reader.EntryNumber); Assert.Equal(" 1A ", actual["A"]); Assert.Equal("1B", actual["B"]); } } } }
public void op_ReadEntry_whenHeaderCtor() { const string header = "A,B"; using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine("1A,1B"); writer.Flush(); stream.Position = 0; using (var reader = new CsvStreamReader(stream, header)) { Assert.Equal(header, reader.Header); var actual = reader.ReadEntry(); Assert.Equal(1, reader.LineNumber); Assert.Equal(1, reader.EntryNumber); Assert.Equal("1A", actual["A"]); Assert.Equal("1B", actual["B"]); } } } }
public void op_ReadEntry_whenEmbeddedQuotation() { using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine("A,B,C"); writer.WriteLine("\"\"\"1A\",\"1\"\"B\",\"1C\"\"\""); writer.Flush(); stream.Position = 0; using (var reader = new CsvStreamReader(stream)) { var actual = reader.ReadEntry(); Assert.Equal(2, reader.LineNumber); Assert.Equal(1, reader.EntryNumber); Assert.Equal("\"1A", actual["A"]); Assert.Equal("1\"B", actual["B"]); Assert.Equal("1C\"", actual["C"]); } } } }