C#matlab读取txt数据据

3254人阅读
&& 今天预实现一功能,将txt中的数据转到excel表中,做为matlab的数据源。搜集一些c#操作excel的程序。步骤如下:
& 下载一个Microsoft.Office.Interop.Excel.dll&& 在项目中引用。
&& 编写代码如下:
string path = "c://date//xyu.txt";
StreamReader sr = new StreamReader(path);
string strLine = sr.ReadLine();
int rowNum = 1;
object missing = System.Reflection.Missing.V
ApplicationClass app = new ApplicationClass();
app.Application.Workbooks.Add(true);
Workbook book = (Workbook)app.ActiveW
Worksheet sheet = (Worksheet)book.ActiveS
while (!string.IsNullOrEmpty(strLine))
string[] tempA
tempArr = strLine.Split(',');
for (int k = 1; k &= tempArr.L k++)
sheet.Cells[rowNum, k] = tempArr[k - 1];
strLine = sr.ReadLine();
//保存excel文件
book.SaveCopyAs("D://source.xls");
//关闭文件
book.Close(false, missing, missing);
//退出excel
app.Quit();
MessageBox.Show("转化成功!");&&
&&& 以上代码可以实现功能,由于txt中的数据有60501行,数据量太大。我估算了一下,用以上代码转到excel要用大约2-3分钟。我一共要转9个txt。一共要用20多分钟。这样作出系统显然是让人难以忍受的。接着找资料,发现用rang方法可以提高速率。只用大约3-4秒钟的时间,提高效率几十倍。代码如下:
string path = "c://date//xyu.txt";
StreamReader sr = new StreamReader(path);
string strLine = sr.ReadLine();
int rowNum = 1;
object missing = System.Reflection.Missing.V
ApplicationClass app = new ApplicationClass();
app.Application.Workbooks.Add(true);
Workbook book = (Workbook)app.ActiveW
Worksheet sheet = (Worksheet)book.ActiveS
Range r = sheet.get_Range("A1", "C1");
//获取行数
object[,] objectData = new object[65535, 3];
while (!string.IsNullOrEmpty(strLine))
string[] tempA
tempArr = strLine.Split(',');
for (int k = 1; k &= tempArr.L k++)
objectData[rowNum-1, k-1] = tempArr[k - 1];
strLine = sr.ReadLine();
r = r.get_Resize(65535, 3);
r.Value2 = objectD
r.EntireColumn.AutoFit();
//保存excel文件
book.SaveCopyAs("D://source.xls");
//关闭文件
book.Close(false, missing, missing);
//退出excel
app.Quit();
MessageBox.Show("转化成功!");
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:137330次
积分:1736
积分:1736
排名:第11678名
原创:27篇
转载:74篇
评论:29条
(1)(3)(2)(1)(4)(1)(1)(3)(1)(3)(1)(1)(7)(3)(1)(2)(5)(8)(4)(3)(1)(14)(1)(21)(1)(1)(3)(2)(2)等 级:贵宾
威 望:19
帖 子:565
专家分:3217
//原文件oldFile,请修改路径
string oldFile = &C:\\1.txt&;
//double型数据将写入新文件newFile,仍以\t分割,请修改路径
string newFile = &C:\\2.txt&;
string outStr = &&;
FileStream fs = new FileStream(oldFile, FileMode.Open);
FileStream fs1 = new FileStream(newFile, FileMode.Create);
StreamReader sr = new StreamReader(fs);
StreamWriter sw = new StreamWriter(fs1);
while (!sr.EndOfStream)
&&& outStr = &&;
&&& string str = sr.ReadLine();
&&& string[] arrStr = Regex.Split(str, &\t&);
&&& for (int i = 0; i & arrStr.L i++)
&&&&&&&&if (int.TryParse(arrStr[i], out a))
&&&&&&&&else if (double.TryParse(arrStr[i], out b))
&&&&&&&&&&&&outStr += arrStr[i] + &\t&;
&&& if (arrStr.Length & 1)
&&&&&&&&outStr = outStr.Substring(0, outStr.Length - 1);
&&&&&&&&sw.WriteLine(outStr);
sr.Close();
sw.Close();
fs.Close();
fs1.Close();
等 级:论坛游民
帖 子:11
专家分:15
回复 2楼 yhlvht
那我如何判断这个文件里面有多少行呢?
等 级:论坛游民
帖 子:11
专家分:15
回复 2楼 yhlvht
我说清楚一点,就是我在任何情况下就想得到文件的总行数,可能是文件刚刚打开缓存
关键是不能一次打开文件到内存
等 级:贵宾
威 望:19
帖 子:565
专家分:3217
不管用什么方式,数据在电脑中就两地方可以放,内存和硬盘。想要知道文件总行数到不难,从头读一次,用int变量加加加呗,这样你在任何情况下都可以使用这个变量得到总行数。
既然内存一次放不下,那只能借一下硬盘用咯。
如果只是几十万数据,内存肯定放得下的,取总行数就更简单
[ 本帖最后由 yhlvht 于
16:31 编辑 ]
等 级:论坛游民
帖 子:11
专家分:15
回复 5楼 yhlvht
其实我是想不加进内存获取行数,我也想过这样用++来走一遍,但是其实很耗费时间,估计计算行数比直接加进内存来算数组长度还有更耗时间。而且还需要遍历2遍,一次快速得到长度,一直慢慢的读取数据
等 级:贵宾
威 望:19
帖 子:565
专家分:3217
那你用int aa = File.ReadAllLines(FilePath).L来取行数吧,我测了80几M的文件,160多万行,也不过1秒钟而已。
不读一遍文件始终没有办法
[ 本帖最后由 yhlvht 于
17:16 编辑 ]
等 级:论坛游民
帖 子:11
专家分:15
回复 7楼 yhlvht
我第一次是用这种方式的,不过这种方式有一个缺点,就是文件会一次性读进内存
等 级:贵宾
威 望:19
帖 子:565
专家分:3217
回复 8楼 qq
读进内存以后,你把它回收掉就好了。
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
楼上的一直在说服楼主。
试试文件的大小除以每行的字节数。如果每行的数据量是固定的话。
版权所有,并保留所有权利。
Powered by , Processed in 0.033823 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reservedc# 读取文件内容存放到int数组 array.txt
阅读:687次&&&时间: 00:00:00&&
复制代码 代码如下:using S using System.D using System.C using System.W using System.Web.S using System.Web.UI; using System.Web.UI.WebC using System.Web.UI.WebControls.WebP using System.Web.UI.HtmlC using System.C using System.IO; using System.T /// &summary& /// Summary description for ReadFile /// &/summary& public class ReadFile { public ReadFile() { // // TODO: Add constructor logic here // } public int[,] ReadFileToArray() { int[,] iret = ArrayList alNumLine = getFileContent(); string[] strLineArr = if (alNumLine.Count & 0) { strLineArr = Convert.ToString(alNumLine[0]).Trim(',').Split(','); iret = new int[alNumLine.Count, strLineArr.Length]; for (int i = 0; i & alNumLine.C i++) { strLineArr = Convert.ToString(alNumLine[i]).Trim(',').Split(','); for (int j = 0; j & strLineArr.L j++) { iret[i, j] = Convert.ToInt32(strLineArr[j]); } } }
} public ArrayList getFileContent() { ArrayList alRet = new ArrayList(); string strFilePath = HttpContext.Current.Server.MapPath("~") + "/array.txt"; if (!File.Exists(strFilePath)) { HttpContext.Current.Response.Write("文件[" + strFilePath + "]不存在。"); return alR } try { //读出一行文本,并临时存放在ArrayList中 StreamReader sr = new StreamReader(strFilePath, Encoding.GetEncoding("gb2312"));
while ((l = sr.ReadLine()) != null) { if (!string.IsNullOrEmpty(l.Trim())) alRet.Add(l.Trim()); } sr.Close(); } catch (IOException ex) { HttpContext.Current.Response.Write("读文件出错!请检查文件是否正确。"); HttpContext.Current.Response.Write(ex.ToString()); } return alR } }
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
Copyright &
All Rights ReservedC# 读取TXT文件程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
C# 读取TXT文件程序
技​术​文​档
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 c语言读取txt文件数据 的文章

 

随机推荐