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();
    }
예제 #2
0
        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);
        }
예제 #3
0
    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();
    }
예제 #4
0
        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);
        }
예제 #6
0
        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());
        }
예제 #7
0
    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();
    }
예제 #8
0
        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("请选择文件!");
            }
        }
예제 #9
0
    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);
    }
예제 #10
0
        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();
                }
            }
        }
예제 #11
0
    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();
     }
 }
예제 #13
0
    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}");
            }
        }
    }
예제 #14
0
        /// <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();
        }
예제 #15
0
    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();
    }
예제 #16
0
 /// <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());
     }
 }
예제 #17
0
 /// <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();
 }
예제 #19
0
    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);
    }
예제 #20
0
 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);
     }
 }
예제 #21
0
파일: WorkForm.cs 프로젝트: w7789475/EVOK
        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();
     }
 }
예제 #23
0
        /// <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)));
        }
예제 #24
0
        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]);
                }
            }
        }
예제 #25
0
 public void SimpleCSVParserParrallel()
 {
     using (var reader = new CsvStreamReader <DataModel>("PackageAssets.csv", new CsvStreamOptions()
     {
         RemoveEmptyEntries = true
     }))
     {
         var entries = reader.AsParallel()
                       .ToList();
     }
 }
예제 #26
0
        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++;
         });
     }
 }
예제 #28
0
        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"));
            }
        }
예제 #29
0
        /// <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);
            }
        }
예제 #30
0
        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());
        }
예제 #31
0
		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]);
			}
		}
예제 #32
0
 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"]);
             }
         }
     }
 }
예제 #33
0
        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));
                }
            }
        }
예제 #34
0
 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"]);
             }
         }
     }
 }
예제 #35
0
        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"]);
                    }
                }
            }
        }
예제 #36
0
 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);
             }
         }
     }
 }
예제 #37
0
        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
                    }
                }
            }
        }
예제 #38
0
 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"]);
             }
         }
     }
 }
예제 #39
0
        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"]);
                    }
                }
            }
        }
예제 #40
0
 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"]);
             }
         }
     }
 }