C#实现读取一个文件下不同TXT文件的相同位置数据获取

哈哈哈 我来啦~
用C#实现读取一个文件下不同TXT的相同位置数据获取体积数据
一、数据展示
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第1张图片
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第2张图片
二、开发部署
打开VS2015 【文件】|【新建】|【项目】|【Visual C#】|【Windows窗体应用程序】,选一下位置以及命名
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第3张图片
之后便出现了设计界面,继续进行我们的开发,写程序重要的是逻辑思路 你想要干什么,然后把它分解成一个一个的问题,逐个解决,合起来解决方案便有了雏形。
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第4张图片
2.1开发思路
问题:读取一个文件下不同TXT的相同位置数据获取体积数据
1.找到包含体积的TXT文件进行数据提取并输出显示
添加一个菜单栏,添加一个Button,这个button负责获取所有Txt文件所在的目录,并对目录里的Txt文件进行遍历,对每一个Txt文件进行分割提取出体积数据,把文件名称(这个文件名称和我们原始洼地面文件的字段有联系)以及体积存起来,可以存到一个字典中,并且显示给我们看,这里我们需要一个datagridview控件
2.在菜单栏再添加一个添加一个Button,这个button负责把datagridview空间显示的数据导出为excel
2.2控件布局:
拖动工具箱【ToolStrip】空间,添加一个button
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第5张图片
点菜单栏 倒三角符号,添加button按钮
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第6张图片
右键button按钮点击【属性】,更改【Display】为(Image and Text)以及Text为【加载数据】
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第7张图片
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第8张图片
然后用同样的方式再添加一个Button,命名为【导出数据】,再拖一个datagridview控件到布局窗口,布局如下
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第9张图片
2.3编写代码
双击【加载数据】按钮,进入Click事件,我们都有使用软件的经历,word为例,当我们想打开一个文件时,点击【文件】下的【打开】【浏览】,就会出现打开窗口,出现存储文件的窗体
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第10张图片
所以我们也要出现这样一个窗口,然后获取所有Txt所在的路径
双击【加载数据】按钮,进入到该按钮右键单击事件中,意思就是,当你点击时,它根据事件里的代码采取相应的行动
在这里插入图片描述
在这里插入图片描述
在此需要定义三个全局变量,用方框圈住的就是
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第11张图片
这个事件里的程序代码如下:

private void toolStripButton1_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            //只显示文本文件
            open.Filter = "文本文件|*.txt";
            if (open.ShowDialog() == DialogResult.OK)//记住!!
            {
                //获取全路径文件名 G:\\桌面\\volumn\\SK1_clip.txt
                string path = open.FileName;
                //获取目录信息  G:\\桌面\\volumn
                Dir_name = System.IO.Path.GetDirectoryName(path);
                /* 
                 获取文件名 即 SK1_clip.txt
                 string name=System.IO.Path.GetFileName(open.FileName);
                 string name = open.SafeFileName;
                 */
                Director(Dir_name);
                dataGridView1.DataSource = volumn.ToArray();
                dataGridView1.Columns[0].HeaderCell.Value = "ID";
                dataGridView1.Columns[1].HeaderCell.Value = "体积";
                dataGridView1.Show();
            }

        }
            //实现Txt遍历 Director函数实现
        void Director(string dir)
        {
            //初始化目录
            DirectoryInfo d = new DirectoryInfo(dir);
            //获取 G:\\桌面\\volumn下的所有文件
            FileSystemInfo[] fsinfos = d.GetFileSystemInfos();
            //对这些文件进行遍历
            foreach (FileSystemInfo fsinfo in fsinfos)
            {
                string line = null;
                判断是否文本文件
                if (fsinfo.Extension == ".txt")
                {
                    //这里我们不需要了 因为我们只遍历这一个文件夹下的txt 而不是一个文件夹下的多个文件夹下的txt
                    //Director(fsinfo.FullName);//递归调用
                    //获取遍历的文件地址
                    string test_name = dir + "\\" + fsinfo;
                    // 文件名没有扩展名即  SK1    _clip  和ID关联
                    string txt_name = System.IO.Path.GetFileNameWithoutExtension(test_name);
                    StreamReader context = new StreamReader(test_name, Encoding.Default);//Encoding.GetEncoding("GB2312") 简体中文
                    while ((line = context.ReadLine()) != null)
                    {
                        //去除空格
                        line = line.Replace(" ", "");
                        //存在数组里面
                        string[] sArrary = line.Split(',');
                        volumn.Add(txt_name, Convert.ToDouble(sArrary[6]));
                    }
                }
            }
        }

关于数据分割时的小细节 因为倒数第三个数有空格 所以我都进行了字符串去空格处理 before
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第12张图片
after
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第13张图片
我们获得文本文件所在的目录的文件,但是只有打对号的文件我们需要处理,所以我用if进行了一次判断 区分开来是通过文件后缀
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第14张图片
第一步已完成,运行过程展示,按F5,运行界面出现,点击【加载数据】,找到TXT所在位置,随机点击一个TXT文件,点击【打开】,提取体积数据将会显示出来
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第15张图片
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第16张图片
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第17张图片
双击【导出数据】按钮,进入对应的·事件,代码编写如下:

private void toolStripButton2_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
            //保存对话框是否记忆上次打开的目录 
            saveFileDialog.RestoreDirectory = true;
            //该值指示如果用户指定了不存在的文件,对话框是否提示用户创建文件的权限。
            saveFileDialog.CreatePrompt = true;
            saveFileDialog.Title = "保存为Execel数据";
            saveFileDialog.ShowDialog();
            if (saveFileDialog.FileName == "")
                return;

            Stream myStream;
            myStream = saveFileDialog.OpenFile();
            //使用默认的编码  简体中文
            StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(0));
            string str = "";
            try
            {
                //遍历列 
                for (int i = 0; i < dataGridView1.ColumnCount; i++)
                {
                    if (i > 0)
                    {
                        str += "\t";
                    }
                    str += dataGridView1.Columns[i].HeaderText;
                }
                sw.WriteLine(str);
                //遍历行 8行
                for (int j = 0; j < dataGridView1.Rows.Count; j++)
                {
                    string tempStr = "";
                    //一行两个 用列数限制
                    for (int k = 0; k < dataGridView1.Columns.Count; k++)
                    {
                        if (k > 0)
                        {
                            tempStr += "\t";
                        }
                        tempStr += dataGridView1.Rows[j].Cells[k].Value.ToString();
                    }
                    sw.WriteLine(tempStr);
                }
                sw.Close();
                myStream.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            // 不管有没有出现异常 都会执行finally 语句
            finally
            {
                sw.Close();
                myStream.Close();
                if (MessageBox.Show("导出成功!你想打开这个文件吗?", "导出到...", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    try
                    {
                        System.Diagnostics.Process process = new System.Diagnostics.Process();
                        process.StartInfo.FileName = saveFileDialog.FileName;
                        process.StartInfo.Verb = "Open";
                        process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
                        process.Start();
                    }
                    catch
                    {
                        MessageBox.Show("你的计算机中未安装Excel,不能打开该文档!");
                    }
                }
            }
        }
 

按F5,运行界面出现,点击【导出数据】,选择一路径放置excel,并命名,点击保存,弹出界面,点击【是】,之后还会弹出一对话框,点【是】
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第18张图片
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第19张图片
它会自动打开这个excel文件,之后弹出对话框,点【是】
在这里插入图片描述
之后设置【体积】所在列单元格格式,小数位数选4,这样精度更高,不会自动吃数据
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第20张图片
C#实现读取一个文件下不同TXT文件的相同位置数据获取_第21张图片

到此就结束啦!!

你可能感兴趣的:(Txt字符串分割,遍历文件夹下的数据,c#,windows)