C#读文件问题.帮我修改下代码吧.

xx36269500 2010-09-13 10:36:54

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions;

namespace Demotest1
{
class Program
{
static void Main(string[] args)
{
//基本路径
string path = "d:\\我的文档\\桌面\\csv\\";
//要读取的文件名称
string[] name = new string[15]{
"Armor Channel - 20100908-085305.csv",
"Armor Channel - 20100908-085355.csv",
"Armor Channel - 20100908-085454.csv",
"Armor Channel - 20100908-085555.csv",
"Armor Channel - 20100908-085654.csv",
"Armor Channel - 20100908-085755.csv",
"Armor Channel - 20100908-085857.csv",
"Armor Channel - 20100908-085955.csv",
"Armor Channel - 20100908-090054.csv",
"Armor Channel - 20100908-090155.csv",
"Armor Channel - 20100908-090255.csv",
"Armor Channel - 20100908-090355.csv",
"Armor Channel - 20100908-090455.csv",
"Armor Channel - 20100908-090555.csv",
"Armor Channel - 20100908-090654.csv",
};
//求平均值的个数
int len = 0;
//存文件数据
ArrayList list = new ArrayList();
//循环文件数
for (int i = 0; i < name.Length; i++)
{
//读取文件
string fullPath = Path.Combine(path, name[i]);
string txt = "";
StreamReader sr = new StreamReader(fullPath);
while (!sr.EndOfStream)
{
string str = sr.ReadLine();
txt += str + "\n";
}
sr.Close();
//按日期分割
string[] f = Regex.Split(txt, "20100908", RegexOptions.IgnoreCase);
//将第四个分割字符串按";"分割

string[] temp = f[3].Split(';');
float[] f1 = new float[temp.Length];
for (int k = 2; k < f1.Length; k++)
{
f1[k] = Convert.ToSingle(temp[k]);
}
//求平均值的个数
len = f1.Length;
//将数组添加到集合
list.Add(f1);

}
//最后得到的结果
String newfileStr = "";
for (int i = 2; i<len ; i++)//加多少次256
{
// 总和
float count = 0;
// i=0;j=1 每个文件加多少次
for (int j = 0; j<list.Count; j++)
{
//读取第j个数组
float [] f = (float [])list[j];
//读取第j个数组的第i个数字,然后求和
count = Convert.ToSingle(count + f[i]);
}

//将总和除以文件数,在存到newfileStr里
if (newfileStr == "")
{
newfileStr =Convert.ToString( count / list.Count);
}
else {
newfileStr = newfileStr + ";" + count / list.Count;
}
}
Console.WriteLine(newfileStr);
StreamWriter sw = File.CreateText("d:\\我的文档\\桌面\\csv\\myText.dx");
sw.WriteLine(newfileStr);
sw.Flush();
sw.Close();
}
}

}




我之前用下标读的,代码如上, 如果说没个文件都是一样的格式的话是没问题的, 可以读,
但是现在可能有些文件的数据行数可能不同.
每个数据前面都有日期 时间的, 日期是相同的 只是时间点不同.例如:
20100908;085313;
20100908;085326;
20100908;085335;
请问下 我该怎么去判断 我读的是每个文件的最后一条数据. 帮我修改下代码吧.

...全文
157 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xx36269500 2010-09-13
  • 打赏
  • 举报
回复
都去吃饭了阿?
xx36269500 2010-09-13
  • 打赏
  • 举报
回复
问题还是没解决阿,
纠结.
xxlxmd 2010-09-13
  • 打赏
  • 举报
回复
ArrayList 会 拆箱,封箱。 。。。 耗时估计是最长的
xx36269500 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ajiu09 的回复:]
上面顺序错了
string last=""
while (!sr.EndOfStream)
{
last = str;
string str = sr.ReadLine();
txt += str + "\n";

}
[/Quote]
你这个错了, 不行的.
ajiu09 2010-09-13
  • 打赏
  • 举报
回复
上面顺序错了
string last=""
while (!sr.EndOfStream)
{
last = str;
string str = sr.ReadLine();
txt += str + "\n";

}
ajiu09 2010-09-13
  • 打赏
  • 举报
回复
string last=""
while (!sr.EndOfStream)
{
string str = sr.ReadLine();
txt += str + "\n";
last = str;
}
这样last就是最后的数据了,LZ是这个意思么?
xx36269500 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ajiu09 的回复:]
每次多读两条,一条使用,另一条判断是否是EOF
或者每次读取后保存到一个变量里,如果str==EOF则返回原来的变量取值。
LZ是这个意思么?
[/Quote]

不是, 你看上面有15个csv文件, 然后每个文件里可能有的是4行数据 可能有些文件里 只有3条数据,
如果说不做判断的话,里面只有3行数据的话 string[] temp = f[3].Split(';'); 这个有报错. 索引超过了,
ajiu09 2010-09-13
  • 打赏
  • 举报
回复
每次多读两条,一条使用,另一条判断是否是EOF
或者每次读取后保存到一个变量里,如果str==EOF则返回原来的变量取值。
LZ是这个意思么?
xx36269500 2010-09-13
  • 打赏
  • 举报
回复
怎么没人来阿?

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧