2

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

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

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 + "");
4

3 回答 3

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)。

注意:注意您操作系统上的区域设置,如果您的文件.用作浮点分隔符,它可能会在,设置的机器上失败。

于 2012-09-20T08:13:35.727 回答
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();
于 2012-09-20T08:23:10.603 回答
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

于 2012-09-20T08:13:05.923 回答