如何正确解析由空格分隔的文本文件

2023-11-25

下面是我的示例文本文件

enter image description here {

这是我的架构文件

[Sample File.txt]
ColNameHeader=True
Format=TabDelimited
CharacterSet=ANSI

这是我迄今为止编写的用于尝试读取上述示例文件的代码,从上面的文本文件读取的数据行应该返回以在 dataGridView 控件中显示。问题是,它作为单列返回,但我想使用这些空格作为列分隔符。我尝试过不同的字符分隔符但没有成功。

public DataSet LoadCSV(int numberOfRows)
    {
        DataSet ds = new DataSet();
            // Creates and opens an ODBC connection
            string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + this.dirCSV.Trim() + ";Extensions=asc,csv,tab,txt;Persist Security Info=False";

            string sql_select;
            OdbcConnection conn;
            conn = new OdbcConnection(strConnString.Trim());
            conn.Open();

            //Creates the select command text
            if (numberOfRows == -1)
            {
                sql_select = "select * from [" + this.FileNevCSV.Trim() + "]";
            }
            else
            {
                sql_select = "select top " + numberOfRows + " * from [" + this.FileNevCSV.Trim() + "]";
            }

            //Creates the data adapter
            OdbcDataAdapter obj_oledb_da = new OdbcDataAdapter(sql_select, conn);

            //Fills dataset with the records from CSV file
            obj_oledb_da.Fill(ds, "csv");

            //closes the connection
            conn.Close();

        return ds;
    }

并将 dataGridView 的数据源设置为

    // loads the first 500 rows from CSV file
this.dataGridView_preView.DataSource = LoadCSV(500);
this.dataGridView_preView.DataMember = "csv";

我,在 datagridview 中得到这个,我得到一列,但我希望看到返回的数据为 7 列。

另外,我不知道 F2 和 F3 列来自哪里

enter image description here


我可能会用不同的方式来做这件事。我将使用 StreamReader,逐行读取文件,将字符串分解为对象属性,并将对象存储在列表中。然后将该列表绑定到 datagridviews 数据源。我演示了两种快速方法来做到这一点。

1 - 制表符分隔的数据

如果文件是制表符分隔的(看起来如此),则将该行拆分为一个数组,并将每个索引分配给一个属性,如下所示。

public partial class Form1 : Form
{
    private void Form1_Load(object sender, EventArgs e)
    {
        var rows = new List<Row>();
        var sr = new StreamReader(@"C:\so_test.txt");
        while (!sr.EndOfStream)
        {
            string s = sr.ReadLine();
            if (!String.IsNullOrEmpty(s.Trim()))
            {
                rows.Add(new Row(s));
            }
        }
        sr.Close();
        dataGridView1.DataSource = rows;
    }
}

public class Row
{
    public double Number1 { get; set; }
    public double Number2 { get; set; }
    public double Number3 { get; set; }
    public double Number4 { get; set; }
    public double Number5 { get; set; }
    public double Number6 { get; set; }
    public double Number7 { get; set; }
    public string Date1 { get; set; }

    public Row(string str)
    {
        string[] separator = { "\t" };
        var arr = str.Split(separator, StringSplitOptions.None);
        Number1 = Convert.ToDouble(arr[0]);
        Number2 = Convert.ToDouble(arr[1]);
        Number3 = Convert.ToDouble(arr[2]);
        Number4 = Convert.ToDouble(arr[3]);
        Number5 = Convert.ToDouble(arr[4]);
        Number6 = Convert.ToDouble(arr[5]);
        Number7 = Convert.ToDouble(arr[6]);
        Date1 = arr[7];
    }
}

2 - 硬起点和长度

如果数据以制表符分隔,但符合每列的严格起点和终点,则可以将每列的起点和长度声明为常量,并通过子字符串获取它们。只需要更改 Row 类中的代码即可,如下所示。为了简洁起见,我保留了一些常量,只是对它们进行了硬编码。

    public Row(string str)
    {
        Number1 = Convert.ToDouble(str.Substring(4, 6));
        Number2 = Convert.ToDouble(str.Substring(16, 6));
        Number3 = Convert.ToDouble(str.Substring(28, 7));
        Number4 = Convert.ToDouble(str.Substring(40, 7));
        Number5 = Convert.ToDouble(str.Substring(52, 6));
        Number6 = Convert.ToDouble(str.Substring(64, 6));
        Number7 = Convert.ToDouble(str.Substring(76, 6));
        Date1 = str.Substring(88, 24);
    }

Screenshot

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确解析由空格分隔的文本文件 的相关文章

随机推荐

  • 制作半色调图像的算法?

    什么是制作半色调图像的好算法 例如this 快速谷歌搜索会带来一堆关于这个主题的论文 但很难判断哪些是好的 有效的等 有没有最好的选择来做这种事情 过滤至您想要的分辨率 想要将 点 分开 获取平均强度 该区域中的像素组 绘制点 使得曲面 点
  • C++ 类中对象计数的静态变量?

    我希望有一个静态成员变量来跟踪已创建的对象的数量 就像这样 class test static int count 0 public test count 这是行不通的 因为根据 VC 的说法 a member with an in cla
  • python 3.5 asyncio和aiohttp Errno 101网络无法访问

    我在 Ubuntu 16 上使用 python 3 5 我正在尝试使用 aiohttp 编写一个简单的客户端 这是我的代码 我把它从here 这是第一个代码示例 禁用了 ssl 检查 import aiohttp import asynci
  • 如何使单词边界 \b 与破折号不匹配

    我将代码简化为我遇到的具体问题 import re pattern re compile r bword b result pattern sub lambda x match word word 我正进入 状态 match match 但
  • 从屏幕中心获取位置 Swift MapKit

    我是 Swift 编程新手 我正在尝试构建一个应用程序 我可以使用 MapKit 和 Swift 2 获取视图中心的坐标 我已经可以获得当前位置 但如果我在地图上移动 我需要将位置设置为新点 该点将成为屏幕的中心 你能帮我解决这个问题吗 R
  • Swift 将每隔一个项目追加到数组中

    我有一个快速数组 Monthdata 我想将每个第二个值附加到我的月份数组中 var monthData let months Jul 12 Aug 12 Sep 12 Oct 12 for month in months self mon
  • 离开作用域时调用函数

    离开作用域时自动调用函数的最优雅的解决方案是什么 我目前的方法 见下文 works但我想应该有一些更通用的东西 比如为此编写一个自定义类 include
  • 为什么函数需要在定义或使用之前声明?

    在 C 中它是可选的 在C 中一 MUST 在使用 定义函数之前声明它 为什么会这样呢 有什么需要吗 我们不会在 C 或 Java 中这样做 有趣的是当我们在的时候defining一个函数 即使定义本身有一个声明 我们也需要声明 天知道为什
  • ActionScript 中的语法突出显示库

    我让用户在我的 Flex3 Flash 10 应用程序中输入一些代码 我想进行语法突出显示 有没有开源库可以帮助我 我需要 Lua 语法支持 但如果库有一个合理的接口来执行此操作 我可以自己添加它 2009 年 1 月 21 日更新 查看A
  • 如何本地化 Django 应用程序的内容

    嘿 我目前正在为我的学习开发一个 django 应用程序 并且已经到了 l18n 的地步 本地化网站本身非常容易 但现在我必须允许用户翻译应用程序的动态内容 用户可以将 产品 保存在数据库中并为其提供名称和描述 但由于整个站点应该本地化 因
  • R 在 Mac OS X Yosemite 中冻结

    我遇到了这个问题 并且没有关于如何解决这个错误的明确解释 每当我尝试保存使用 R 内部编辑器编写的文件时 OS X Mavericks 的最新版本 R v 3 1 2 就会在 Yosemite 中冻结 当您尝试时它也会冻结source一个函
  • 将 URL 解码为数组而不是字符串

    我目前正在使用 PayPals API 并希望将其响应之一从名称 值对转换为数组 到目前为止我已经用过urldecode 将响应解码为以下内容 email protected email protected MOREINFO lots mo
  • 如何跟踪和检查捆绑的 Ruby gem 中的依赖关系

    Bundler 将自动安装指定 gem 的任何依赖项 但它不会在标准输出中输出哪些依赖项映射到哪些 gem 当依赖项之一安装失败时 该信息非常有用 有没有办法将 Bundler 设置得更详细并在安装时告知依赖项 我正在使用 Bundler
  • DTE.执行命令并等待

    我想使用宏来发布我的网络应用程序项目 小问题是 DTE ExecuteCommand 异步运行 我需要等待命令完成 Example DTE Windows Item Constants vsWindowKindSolutionExplore
  • T-SQL Case 语句以 newid() 作为随机源的奇怪行为

    我正在使用 SQL Server 2012 如果我执行以下操作来获取 1 3 范围内的随机数字列表 则效果很好 SELECT TOP 100 ABS CHECKSUM NEWID 3 1 value of rand FROM sys obj
  • 有没有办法将音频文件发送到语音转文本识别

    我想要 Android 语音识别系统分析音频文件 而不是来自麦克风的默认传入语音 有什么办法可以做到这一点吗 谢谢 cmusphinx sourceforge net wiki tutorialandroid 刚刚发现该链接听起来像是有人创
  • 如何使用 py2exe 减小 exe 的大小

    我使用 python 和 wxwidgets 开发了一个小程序 这是一个非常简单的程序 仅使用一个迷你框架在需要时显示一些信息 其余时间则不显示任何内容 仅在任务栏中显示一个图标 当我使用 py2exe 单文件 exe 模式 优化 构建 e
  • SQL Server 2005 如何清除查询执行计划

    各位程序员大家好 我有一个 SQL Server 2005 查询 第一次处理需要很长时间 第一次运行后 查询的运行速度要快得多 从一分钟到一秒 我知道 SQL Server 正在缓存执行计划 这个术语正确吗 我想做的就是明确这个执行计划 以
  • 异常与断言

    Java异常处理和使用异常处理有什么区别assert状况 众所周知 Assert 有两种类型 但我们什么时候应该使用assert关键词 使用断言进行代码中的内部逻辑检查 并使用正常异常来处理直接代码控制之外的错误情况 不要忘记断言可以打开和
  • 如何正确解析由空格分隔的文本文件

    下面是我的示例文本文件 这是我的架构文件 Sample File txt ColNameHeader True Format TabDelimited CharacterSet ANSI 这是我迄今为止编写的用于尝试读取上述示例文件的代码