C# 怎么从txt 读取小数呢

YXLYY 2015-07-28 11:26:02
大概有几千行数据吧
每一行有三个小数
每个小数由空格隔开


我用了很多循环才读出来,我想问下有没有比较简单的方法


基本格式如下
104.544 285.106 -0.0198154
232.233 291.923 -0.15162
210.273 290.588 2.39844
103.807 290.364 -0.074542
119.751 297.782 0.0620041
124.992 301.494 -0.0500259
195.477 308.035 2.18787
189.829 310.14 2.16521
226.571 307.255 -0.135975
174.067 308.065 3.05251
100.55 298.681 4.02637
122.539 319.984 -0.147274
128.208 324.887 -0.132906
180.539 335.381 -0.118507
...全文
309 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
devmiao 2015-07-29
  • 打赏
  • 举报
回复
不是,是linq
  • 打赏
  • 举报
回复
楼上大神直接用正则搞定
  • 打赏
  • 举报
回复
string txt = @"104.544 285.106 -0.0198154
232.233 291.923 -0.15162
210.273 290.588 2.39844
103.807 290.364 -0.074542
119.751 297.782 0.0620041
124.992 301.494 -0.0500259
195.477 308.035 2.18787
189.829 310.14 2.16521
226.571 307.255 -0.135975
174.067 308.065 3.05251
100.55 298.681 4.02637
122.539 319.984 -0.147274
128.208 324.887 -0.132906
180.539 335.381 -0.118507";
foreach (var str in Regex.Split(txt, @"\s+"))
{
    Console.WriteLine(str);
}
YXLYY 2015-07-29
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
既然你的数据本身就是二维表的形式,那么至少也要循环2次才能获取每一个数据啊
我的得到数据的方式很原始,比如得到第一行字符串,我用一个循环一个字符一个字符查找一个数字,感觉电脑卡死了,半天不出结果! 说明白点,每一行三个数字,其实就是相当于一个点的三维坐标,点我用一个数据结构表示(里面有x,y,z) 我就想知道C# 有没有像matlab一样方便的方法,直接就能得到第一行的三个小数,而不是像我一样一个字符一个字符判断
於黾 2015-07-29
  • 打赏
  • 举报
回复
既然你的数据本身就是二维表的形式,那么至少也要循环2次才能获取每一个数据啊
於黾 2015-07-29
  • 打赏
  • 举报
回复
用了很多循环? 很多是多少? 双重for循环叫很多循环吗?
YXLYY 2015-07-29
  • 打赏
  • 举报
回复
引用 2 楼 devmiao 的回复:
double[][] data = File.ReadAllLines().Select(x => x.Split(' ').Select(y => double.Parse(y)).ToArray()).ToArray();
select 是SQL语句吗
於黾 2015-07-29
  • 打赏
  • 举报
回复
为啥要一个字符一个字符的操作? 不是有split函数可以直接转成string[]数组吗 然后再循环数组转float型不就得了
xuzuning 2015-07-29
  • 打赏
  • 举报
回复
你取出数据是要用的,所以你得有个载体。比如
struct Vector
     {
         public double x, y, z;
 
        public Vector(string str)
        {
            var r = str.Split(' ');
            this.x = double.Parse(r[0]);
            this.y = double.Parse(r[1]);
            this.z = double.Parse(r[2]);
        }
 
         public override string ToString()
         {
             return "x = " + x + ", y = " + y + ", z = " + z;
         }
    }
你可以写一个方法用来从文件读
        static List<Vector> getVector()
        {
            var res = new List<Vector>();
            foreach (var x in File.ReadAllLines(@"data.txt"))
            {
                res.Add(new Vector(x));
            }
            return res;
        }
于是你就有了
            foreach (var x in getVector())
            {
                Console.WriteLine(x.ToString());
            }
C# 是开发工具,不会像 matlab 之类的应用工具那样提供具体的方法 你总是要根据项目的需要和个人喜好,书写一些实用代码的
acade2012 2015-07-29
  • 打赏
  • 举报
回复
ReadAllLines() 读出文件所有行,然后每一行用空格分割得到一个数组,数组里就是你的3个数字,类型转换一下就ok了。
string[] list = System.IO.File.ReadAllLines(@"filepath");

            foreach (string line in list)
            {
                string[] arr = line.Split(' ');

                double num0 = Convert.ToDouble(arr[0]);//数字一
                double num1 = Convert.ToDouble(arr[1]);//二
                double num2 = Convert.ToDouble(arr[2]);//三
            }
devmiao 2015-07-28
  • 打赏
  • 举报
回复
double[][] data = File.ReadAllLines().Select(x => x.Split(' ').Select(y => double.Parse(y)).ToArray()).ToArray();
YXLYY 2015-07-28
  • 打赏
  • 举报
回复
真心很急切,求大神指点一二

110,535

社区成员

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

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

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