2 maoyyao maoyyao 于 2016.03.31 11:49 提问

C#用listView读取文件的后几列数据

我的文件类型是txt的,需要读取该文件的后三列内容,如图:
图片说明
将这些数据导入listview,该如何执行?
主要是不知道如何读取后三列求大神指教,谢谢!

6个回答

herozhangbz
herozhangbz   2016.03.31 13:14
已采纳

用stream流读取存到字符数组中

     public static  string[] Read(string path)
        {
            StreamReader sr = new StreamReader(path, Encoding.Default);
            String line;
            string l=string.Empty;
            string[] lines;
            string[] lin=null;
            while ((line = sr.ReadLine()) != null)
            {
                l += line+"#";
            }
            lines = l.Split('#');
            for (int i = lines.Length - 1; i > lines.Length - 4 && i > 0; i--)
                lin[i] = lines[i];
            return lin;
        }
herozhangbz
herozhangbz 回复wuli路过: 试了试不行,string[] strs = File.ReadAllLines(path, Encoding.Default);这个比较方便但是这个输出的就是把全部的行读成一行并不是数组。
一年多之前 回复
herozhangbz
herozhangbz 你不是要后面三行吗,那个是取文件的倒数三行或者三行以内如果你的txt不到三行的话,好像有点问题你在for循环内声明i够再声明一个j=3在下面把那个lin数组实例化一下。我这个不够间接,我参考了后面那个兄弟的回答再给你个新的吧
一年多之前 回复
maoyyao
maoyyao 其中的for循环有什么用?
一年多之前 回复
zhangshangui_2015
zhangshangui_2015   2016.03.31 16:05

你这txt的文件读取的内容不是很多,可以用File的readalllines方法来读:读取的内容以字符串数组的形式存入数组,方便你下一步解析。代码如下:
string[] strs = File.ReadAllLines(@"d:\csharp\testdata.txt");

CSDNXIAOD
CSDNXIAOD   2016.03.31 16:22

【转】C#如何读取txt文件中每一行每一个数据
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

zanfeng
zanfeng   2016.04.02 00:45

你好利害。怎么写的怎么读不就可以了。readline 按你的格式读出来是的

herozhangbz
herozhangbz   2016.04.04 21:06

上次的回答有点瑕疵那个返回的数组会有点问题。

    public static string[] Read(string path)
        {
            StreamReader sr = new StreamReader(path, Encoding.Default);
            String line;
            string l = string.Empty;
            string[] lines;
            string[] lin = new string[3];
            while ((line = sr.ReadLine()) != null)
            {
                l += line + "#";
            }
            lines = l.Split('#');
            for (int i = lines.Length - 1, j = 0; i > lines.Length - 4 && i > 0; i--)
                lin[j++] = lines[i-1];
            return lin;
        }

这个返回的是后面的三行内容。如果是cmd的话是这么调用的。

            string[] str = null;
            str= Read(@"C:\Users\hero\Desktop\新建文本文档.txt");
            foreach(string s in str)
                Console.WriteLine(s);
herozhangbz
herozhangbz   2016.04.04 21:21

不好意思刚才实验出错了。下面那个兄弟的方法也是可行的。我以为是所有昂读成一整行,实际上是我的txt是只要一行,调试的时候没想到。

    public static string[] Readline(string path)
        {
            string[] lin = new string[3];
            string[] strs = File.ReadAllLines(path, Encoding.Default);
            for (int i = strs.Length , j = 0; i > strs.Length -3 && i > 0; i--)
                lin[j++] = strs[i - 1];
            return lin;
        }

你会发现跟我上次那个for循环有点不一样,那是因为我那个方法每一行读后添加一个#字符,最后一行末尾也有#字符,split分割的时候最后会多出一行空字符。所以要去length-1。他这个方法并不存在这个问题,而且我那个方法的前提条件是你的txt文件内没有#字符不然分割的时候回出现问题。这个是最优答案,借鉴了楼下兄弟的方法。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!