C# 读取dat文件

dat数据如图,现在想读出来一列的数据,保存在一个变量里就行,第一行不规则的数据就忽略掉就行,数据都是用逗号分隔的,有17列,如果想读出第k列的数据,请各位大侠帮帮忙。最... dat数据如图,现在想读出来一列的数据,保存在一个变量里就行,第一行不规则的数据就忽略掉就行,数据都是用逗号分隔的,有17列,如果想读出第k列的数据,请各位大侠帮帮忙。
最好是用StreamRead方法,或者FileStream方法。
private void button2_Click(object sender, EventArgs e)
{
FileStream fstream = new FileStream(filepath, FileMode.Open,FileAccess.ReadWrite);
从这往下写就行。。。。。。。。。。。。。。。。
能回答的话又追加,多谢了
展开
 我来答
syht2000
高粉答主

2013-11-01 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
public static double[] GetColumn(double[][] data, int i)//取得二维数组第i列,从0开始
{
    List<double> list = new List<double>();
    foreach (double[] line in data)
    {
        if (line.Length > i)
            list.Add(line[i]);
    }
    return list.ToArray();
}
public static double[][] ReadFileToArray(string file)//读入文件至二维交错数组
{
    string[] line = File.ReadAllText(file).Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
    if(line.Length>0)
    {
        double[][] result = new double[line.Length - 1][];
        int count = -1;
        double temp = 0f;
        foreach (string str in line)//处理每一行
        {
            if (count < 0) { count++; continue; }//首行不处理
            string[] part = str.Split(new char[] { ',', ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
            result[count] = new double[part.Length];
            if (part.Length > 0)
            {
                int subcount = 0;
                foreach (string s in part)//处理每行中数据
                {
                    if (double.TryParse(s, out temp))//错误处理,防止行中错误数字或分隔符
                        result[count][subcount] = temp;
                    subcount++;
                }
            }
            count++;
        }
        return result;
    }
    return null;
}
//示例
double[][] data = ReadFileToArray(@"d:\1.txt");//取出完整数组
if(data!=null)
   double[] col = GetColumn(data, 1);//取得第二列
zljk0306
2013-11-01 · TA获得超过366个赞
知道小有建树答主
回答量:229
采纳率:90%
帮助的人:205万
展开全部
int k = 0;//读取第几列的数据,默认
            string strResult = "";//读取的结果
            var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "1.dat");
            if (File.Exists(filepath))
            {
                using (StreamReader sw = new StreamReader(filepath))
                {
                    string strLine1 = sw.ReadLine(); //读取第一行,不做处理
                    string strLine = sw.ReadLine();
                    while (!string.IsNullOrEmpty(strLine))
                    {
                        var array = strLine.Split(',');
                        if (array.Length > 0)
                        {
                            strResult += array[k];
                            strResult += ",";
                        }
                        strLine = sw.ReadLine();
                    }
                }
            }
追问
你的程序很好用,请问怎么把数据乘以1.1再写回原位置呢?
拟采纳你的答案了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qmy031
2013-11-01
知道答主
回答量:30
采纳率:0%
帮助的人:12.6万
展开全部
FileStream fstream = new FileStream(filepath, FileMode.Open,FileAccess.ReadWrite);
StreamReader fileReader = new StreamReader(fstream);
List<String[]> ls = new List<String[]>();
string strLine = "";
while (strLine != null)
{
strLine = fileReader.ReadLine();
if (strLine != null && strLine.Length > 0)
{
ls.Add(strLine.Split(','));
}
}
fileReader.Close();
//下面组建你要存放数据的Table,我以前的数据第一行是列名所以下编码,这里你自己根据需要来改写
DataTable dt = new DataTable();
for (int i = 1; i < 18; i++)
{
DataColumn newColumn = new DataColumn(“列”+i);
dt.Columns.Add(newColumn);
}

for (int i = 1; i < ls.Count; i++)
{
int j = 0;
DataRow mydr; mydr = dt.NewRow();
int intColCount = dt.Columns.Count;
foreach (string str in ls[i])
{
//如果只需要某几列自己在这里加判断吧
mydr[j] = str; j++;
}
dt.Rows.Add(mydr);
}

这样dt就是所有的数据吧,如果只要其中一部分,自己再简单改一下吧!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cjj796
2013-11-01 · TA获得超过8708个赞
知道大有可为答主
回答量:1.3万
采纳率:68%
帮助的人:3443万
展开全部
你好!!

你把文件贴出来一部分内容,不要图片,发私信也行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式