哈哈哈 我来啦~
用C#实现读取一个文件下不同TXT的相同位置数据获取体积数据
一、数据展示
二、开发部署
打开VS2015 【文件】|【新建】|【项目】|【Visual C#】|【Windows窗体应用程序】,选一下位置以及命名
之后便出现了设计界面,继续进行我们的开发,写程序重要的是逻辑思路 你想要干什么,然后把它分解成一个一个的问题,逐个解决,合起来解决方案便有了雏形。
2.1开发思路
问题:读取一个文件下不同TXT的相同位置数据获取体积数据
1.找到包含体积的TXT文件进行数据提取并输出显示
添加一个菜单栏,添加一个Button,这个button负责获取所有Txt文件所在的目录,并对目录里的Txt文件进行遍历,对每一个Txt文件进行分割提取出体积数据,把文件名称(这个文件名称和我们原始洼地面文件的字段有联系)以及体积存起来,可以存到一个字典中,并且显示给我们看,这里我们需要一个datagridview控件
2.在菜单栏再添加一个添加一个Button,这个button负责把datagridview空间显示的数据导出为excel
2.2控件布局:
拖动工具箱【ToolStrip】空间,添加一个button
点菜单栏 倒三角符号,添加button按钮
右键button按钮点击【属性】,更改【Display】为(Image and Text)以及Text为【加载数据】
然后用同样的方式再添加一个Button,命名为【导出数据】,再拖一个datagridview控件到布局窗口,布局如下
2.3编写代码
双击【加载数据】按钮,进入Click事件,我们都有使用软件的经历,word为例,当我们想打开一个文件时,点击【文件】下的【打开】【浏览】,就会出现打开窗口,出现存储文件的窗体
所以我们也要出现这样一个窗口,然后获取所有Txt所在的路径
双击【加载数据】按钮,进入到该按钮右键单击事件中,意思就是,当你点击时,它根据事件里的代码采取相应的行动
在此需要定义三个全局变量,用方框圈住的就是
这个事件里的程序代码如下:
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
after
我们获得文本文件所在的目录的文件,但是只有打对号的文件我们需要处理,所以我用if进行了一次判断 区分开来是通过文件后缀
第一步已完成,运行过程展示,按F5,运行界面出现,点击【加载数据】,找到TXT所在位置,随机点击一个TXT文件,点击【打开】,提取体积数据将会显示出来
双击【导出数据】按钮,进入对应的·事件,代码编写如下:
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,并命名,点击保存,弹出界面,点击【是】,之后还会弹出一对话框,点【是】
它会自动打开这个excel文件,之后弹出对话框,点【是】
之后设置【体积】所在列单元格格式,小数位数选4,这样精度更高,不会自动吃数据
到此就结束啦!!