吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 918|回复: 10
收起左侧

[求助] 读取数据的C#,修改了分隔符,还是出错

[复制链接]
yncehui 发表于 2023-8-28 20:02
private void button1_Click(object sender, EventArgs e)
        {
            C[0, 0] = 1;
            string[] M = new string[1000000];
            int i = 1, h = 0, k = 0, f = 1;
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "*.GFC|*.GFC";
            string name = "";
            if (open.ShowDialog() == DialogResult.OK)
            {
                name = open.FileName;
                //读取原始数据
                StreamReader myreader = new StreamReader(name, System.Text.Encoding.Default);
                string[] split = new string[] { ","};   //这里的“,”来分隔数据读取如下区域的数据格式,总提示出错,不知道哪里有问题?求助
                while ((myreader.Peek() > 0))
                {
                    M[i] = myreader.ReadLine();
                    i++;
                }
                h = i - 1;
                myreader.Close();
                MessageBox.Show("共有数据" + h + "阶", "提示");
                string[,] L1 = new string[h + 1, 10];
                for (int j = 1; j < h + 1; j++)
                {
                    string[] L0 = M[j].Split(split, StringSplitOptions.RemoveEmptyEntries);
                    for (k = 0; k < L0.Length; k++)
                    {
                        L1[j, k] = L0[k];
                        //  richTextBox1.Text += L1[j, k] + " ";

                    }
                    // richTextBox1.Text += "\n";
                    // textBox1.Text = j.ToString();
                }
                do
                {
                    f++;
                }
                while (L1[f, 0] != "end_of_head");

                for (int n = 2; n < 361; n++)
                {
                    for (int m = 0; m <= n; m++)
                    {
                        C[n, m] = double.Parse(L1[f + 2, 3]);
                        S[n, m] = double.Parse(L1[f + 2, 4]);
                        f++;
                    }
                }
                C[2, 0] -= -0.484166774985E-03;
                C[4, 0] -= +0.790303733511E-06;
                C[6, 0] -= -0.168724961151E-08;   //调整EGM96的2-10偶数阶求函数系数
                C[8, 0] -= +0.346052468394E-11;
                C[10, 0] -= -0.265002225747E-14;
            }
            
        }
需要读取加载的数据格式如下:
key    L    M         C                   S              sigma C         sigma S
end_of_head =========================================================================
gfc,0,0,1.000000000000E+00,0.000000000000E+00,0.00000000E+00,0.00000000E+00
gfc,2,0,-0.484165371736E-03,0.000000000000E+00,0.35610635E-10,0.00000000E+00
gfc,2,1,-0.186987635955E-09,0.119528012031E-08,0.10000000E-29,0.10000000E-29
gfc,2,2,0.243914352398E-05,-0.140016683654E-05,0.53739154E-10,0.54353269E-10
gfc,3,0,0.957254173792E-06,0.000000000000E+00,0.18094237E-10,0.00000000E+00
gfc,3,1,0.202998882184E-05,0.248513158716E-06,0.13965165E-09,0.13645882E-09
gfc,3,2,0.904627768605E-06,-0.619025944205E-06,0.10962329E-09,0.11182866E-09
gfc,3,3,0.721072657057E-06,0.141435626958E-05,0.95156281E-10,0.93285090E-10
我将

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pjy612 发表于 2023-8-28 20:19

直接File.ReadAllLine 或者 AllText
然后 直接一步步调试 看看为什么错吧。。。
EnterpriseSolu 发表于 2023-8-28 20:20
debug 报错的信息是什么 ,或是你准备一套项目文件,文件附带,我帮忙你调试通过
apull 发表于 2023-8-28 21:03
本帖最后由 apull 于 2023-8-28 21:05 编辑

[C#] 纯文本查看 复制代码
private static void fun()
{
    int h, k;
    string name = "t.txt";

    //读取原始数据
    StreamReader myreader = new StreamReader(name, System.Text.Encoding.Default);
    string[] split = new string[] { "," };   //.net 4.8下无问题

    string s = myreader.ReadToEnd();
    myreader.Close();

    string[] M = s.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);//win下换行\r\n
    h = M.Length;
    Console.WriteLine("共有数据" + (h - 2) + "阶");

    string[,] L1 = new string[h + 1, 10];
    for(int j = 0; j < h; j++)
    {
        string[] L0 = M[j].Split(split, StringSplitOptions.RemoveEmptyEntries);
        for(k = 0; k < L0.Length; k++)
        {
            L1[j, k] = L0[k];
            Console.Write(L0[k] + " - ");
        }
        Console.WriteLine();
    }

    int f = 0;
    do
    {
        f++;
    }
    while(L1[f, 0].IndexOf("end_of_head") < 0 && f < L1.GetLength(0));//防止越界,L1.GetLength(0)获取行数

    for(int n = f; n < M.Length; n++)//
    {
        for(int m = 1; m <= L1.GetLength(1) && L1[n, m] != null; m++)//L1.GetLength(1)获取列数
        {
            double t = double.Parse(L1[n, m]);
            Console.Write(t + ", ");
        }
        Console.WriteLine();
    }
}

简单示意,供参考。
 楼主| yncehui 发表于 2023-8-28 21:24
apull 发表于 2023-8-28 21:03
[mw_shl_code=csharp,true]
private static void fun()
{

非常感谢
apull 发表于 2023-8-28 21:27

未知大小的数组可以用List解决。
coolcalf 发表于 2023-8-28 21:52
/// <summary>
        /// ReadDataFile
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public static List<string> ReadDataFile(string filename)
        {
            List<string> result = new List<string>();
            
            if (System.IO.File.Exists(filename))
            {
                using (StreamReader sr = new StreamReader(filename, Encoding.Default))
                {
                    String line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        if (!string.IsNullOrEmpty(line.ToString()))
                        {
                            result.Add(line.ToString());
                        }
                    }
                    sr.Close();
                    sr.Dispose();
                }
            }
            else
            {
                //假如文件不存在,就创建这个文件
                using (StreamWriter sw = new StreamWriter(filename,false, Encoding.UTF8))
                {
                    sw.WriteLine("");
                    sw.Flush();
                    sw.Close();
                    sw.Dispose();
                }
            }
            return result;
        }


当然是先整个读出来,然后再split
CoderPiero 发表于 2023-8-29 09:49
new一个list获取所有数据再split吧,你这么写看着好繁琐。。
顺带提示出错的时候,先仔细看下error message 会很有帮助,VS的代码纠错已经做的很好了
cpgqy 发表于 2023-8-30 09:18
EnterpriseSolu 发表于 2023-8-28 20:20
debug 报错的信息是什么 ,或是你准备一套项目文件,文件附带,我帮忙你调试通过

大佬,我网上找到一个源码工作上用得到,需要修改一下信息。但是生成后其中一个功能报错。可不可以帮忙看看 发红包
EnterpriseSolu 发表于 2023-8-30 23:12
cpgqy 发表于 2023-8-30 09:18
大佬,我网上找到一个源码工作上用得到,需要修改一下信息。但是生成后其中一个功能报错。可不可以帮忙看 ...

可以,私信联系
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表