逐行读取.text文件,识别特定字符

时间:2012-09-20 08:11:00

标签: c# arrays coordinates readfile

Basicaly我想逐行读取.txt文件。 当我读到每一行时,我希望识别双打之间的任何空格字符,例如 “12.1 34.478 67.9”就像X Y Z坐标一样。 一旦识别出空格,我就可以独立处理每个双值,并且可以对每个值进行特定的计算。

目前我正在使用它来读取行

string line = reader.ReadLine();
MessageBox.Show("Line Read: " + line + "");

我尝试了一种基于数组的方法,如下所示,但输出从未成功。

char[] block = new char[3];
reader.ReadBlock(block, 0, 3);
Console.WriteLine(block);

MessageBox.Show("" + block + "");

基本完成工作代码感谢#Bartosz看起来像

string line = reader.ReadLine();
var split = line.Split(' ');
var x = double.Parse(split[0]);
var y = double.Parse(split[1]);
var z = double.Parse(split[2]);

MessageBox.Show("X:" + x + "  Y:" + y + "  Z:" + z + "");

3 个答案:

答案 0 :(得分:3)

当你获得你的行时,你可以:

var split = line.Split(' ');

然后你可以获得每一双:

var x = double.Parse(split[0]);
var y = double.Parse(split[0]);
var z = double.Parse(split[0]);

(或TryParse取决于您的错误处理需求,您还应该检查您的拆分是否确实长度为3)。

注意:如果您的文件使用.作为浮动指向分隔符,则操作系统上的语言环境设置会失败,在设置,的计算机上它可能会失败。

答案 1 :(得分:2)

这样的事情怎么样?

var filename = "c:\\test.txt";
var allLines = File.ReadAllLines(filename);
var myList = new List<IEnumerable<double>>();
foreach (var line in allLines)
{
    var currentLine = line.Split(' ').Select(i => double.Parse(i));
    myList.Add(currentLine);
}

有点重构:

var myList = File.ReadAllLines("c:\\test.txt")
                    .Select(line => line.Split(' ')
                        .Select(double.Parse))
                        .ToList();

答案 2 :(得分:0)

http://msdn.microsoft.com/en-us/library/db5x7c0d.aspx

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        try
        {
            using (StreamReader sr = new StreamReader("TestFile.txt"))
            {
                String line = sr.ReadToEnd();
                Console.WriteLine(line);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The file could not be read:");
            Console.WriteLine(e.Message);
        }
    }
}

然后使用var stringlist = string.Split('')

进行拆分

double.Parse stringlist

中的每个字符串