从 C# 中的文本文件中读取数字

2024-03-29

这应该是很简单的事情。我只想从由空格分隔的标记组成的文本文件中读取数字和单词。在 C# 中如何做到这一点?例如,在 C++ 中,以下代码可以读取整数、浮点数和字。我不想使用正则表达式或编写任何特殊的解析代码。

ifstream in("file.txt");
int int_val;
float float_val;
string string_val;
in >> int_val >> float_val >> string_val;
in.close();

此外,每当读取令牌时,不应读入令牌之外的多个字符。这允许进一步的文件读取取决于所读取的令牌的值。作为一个具体的例子,考虑

string decider;
int size;
string name;

in >> decider;
if (decider == "name")
    in >> name;
else if (decider == "size")
    in >> size;
else if (!decider.empty() && decider[0] == '#')
    read_remainder_of_line(in);

解析二进制 PNM 文件也是一个很好的例子,说明了为什么您希望在读入完整令牌后立即停止读取文件。


布兰农的回答解释了如何阅读binary数据。如果你想阅读text数据,您应该读取字符串然后解析它们 - 当然,有内置方法。

例如,要读取包含数据的文件:

10
10.5
hello

您可能会使用:

using (TextReader reader = File.OpenText("test.txt"))
{
    int x = int.Parse(reader.ReadLine());
    double y = double.Parse(reader.ReadLine());
    string z = reader.ReadLine();
}

请注意,这没有错误处理。特别是,如果文件不存在、前两行包含不适当的数据或少于两行,它将引发异常。它将留下一个值null in z如果文件只有两行。

对于一个可以更优雅地失败的更强大的解决方案,您需要检查是否reader.ReadLine()null(表示文件末尾)并使用int.TryParse and double.TryParse而不是Parse方法。

假设值之间有行分隔符。如果你真的想读取这样的字符串:

10 10.5 hello

那么代码将非常相似:

using (TextReader reader = File.OpenText("test.txt"))
{
    string text = reader.ReadLine();
    string[] bits = text.Split(' ');
    int x = int.Parse(bits[0]);
    double y = double.Parse(bits[1]);
    string z = bits[2];
}

同样,您需要执行适当的错误检测和处理。请注意,如果文件实际上只包含一行,您可能需要使用File.ReadAllText相反,让它变得稍微简单一些。还有File.ReadAllLines它将整个文件读入行的字符串数组中。

编辑:如果您需要分割any空格,那么您可能最好使用以下命令读取整个文件File.ReadAllText然后使用正则表达式来分割它。那时我确实想知道你如何表示包含空格的字符串。

根据我的经验,您通常对格式的了解比这更多 - 是否会有行分隔符,或同一行中是否有多个值以空格分隔,等等。

我还要补充一点,混合的二进制/文本格式通常很难处理。简单而高效的文本处理往往会读入缓冲区,如果还有二进制数据,这就会出现问题。如果您需要二进制文件中的文本部分,通常最好包含长度前缀,以便可以解码该数据片段。

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

从 C# 中的文本文件中读取数字 的相关文章

  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • C++ 中的单例和抽象基类

    最近我遇到了关于实现 Singleton 但涉及抽象基类的问题 假设我们有这样的类层次结构 class IFoo it s ABC class Foo public IFoo 我们的单例类定义如下 template
  • 我们如何将数据从一个打开的表单传递到另一个打开的表单?

    winform中如何将数据从一个窗体传递到另一个打开的窗体 在 Windows 应用程序中 一个窗体打开另一个窗体 当我在父表单中输入一些数据时 这些数据将立即反映在另一个子表单中 这将如何发生 取决于你想要多花哨 最简单的方法就是直接调用
  • C++ 中的 Java ArrayList [重复]

    这个问题在这里已经有答案了 在Java中我可以做 List
  • 控制器中的异常处理 (ASP.NET MVC)

    当您自己的代码抛出异常并从控制器中的操作调用时 应该如何处理 我看到很多最佳实践的例子 其中根本没有 try catch 语句 例如 从存储库访问数据 public ViewResult Index IList
  • 以标准用户身份打开默认浏览器 (C++)

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 当 ShellExecute 打开浏览器时 它似乎读取 本地管理员 配置文件而不是用户
  • 替换 JSON 中的转义字符

    我想用空格替换 JSON 字符串中的 字符 我怎样才能做到这一点 我发现从 JSON 字符串中删除所有转义字符的最简单 最好的方法是将字符串传递到正则表达式 Unescape 方法 此方法返回一个没有转义字符的新字符串 甚至删除了 n t
  • 简单的文档管理系统和API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C# 的空条件委托调用线程安全吗? [复制]

    这个问题在这里已经有答案了 这就是我一直以来编写事件引发者的方式 例如属性更改 public event PropertyChangedEventHandler PropertyChanged private void RaisePrope
  • 使用互斥锁来阻止临界区外部的执行

    我不确定我的术语是否正确 但这里是 我有一个由多个线程使用的函数来写入数据 在注释中使用伪代码来说明我想要的内容 these are initiated in the constructor int data std atomic
  • 为什么 std::ranges::filter_view 对象必须是非常量才能查询其元素?

    include
  • C 中的 N 依赖注入 - 比链接器定义的数组更好的方法?

    Given a 库模块 在下文中称为Runner 它作为可重复使用的组件 无需重新编译 即静态链接库 中应用程序分区架构的 而不是主分区 请注意 它仅包含main 出于演示目的 Given a set 顺序无关 调用的其他模块 对象Call
  • 使用 roslyn 扩展 C# 语法

    我试图在没有 else 情况的情况下实现 return if return value if 因为我只想在条件有效时返回或返回一个值 我知道 有if condition return or if condition return value
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜
  • 将小数格式化为两位或整数

    对于 10 我想要 10 而不是 10 00 对于 10 11 我想要 10 11 没有代码可以实现吗 即通过指定格式字符串类似于 0 N2 decimal num 10 11M Console WriteLine num ToString
  • 致命错误 C1001:编译器中发生内部错误(编译器文件“msc1.cpp”,第 1325 行)

    当我编译代码时 错误指向以下类 该错误在两行上突出显示 如下所示 tm validFrom tm validUntil struct t SslCertData final struct t Contact TCHAR Organizati
  • 如何向 ItemsControl 中的 WPF 按钮添加相同的命令

    如何将命令添加到 wpf 按钮 该按钮是ItemsControl并正在修改ItemsSource itself 这是我的 XAML
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对
  • 什么时候使用静态库需要头文件?

    如果我在 Linux 中用 C 创建一个静态库并生成 a 文件 我 或其他人 如何使用该库 例如 我的库定义了一个类 我认为仅仅提供 a 文件是不够的 还需要提供头文件 我如何知道 a 文件必须提供哪些头文件 例如 我是否需要提供我的库代码
  • 如何将 char 转换为 unsigned int?

    我有一个字符数组 它实际上用作字节数组 而不是用于存储文本 在数组中 有两个特定字节表示我需要存储到无符号 int 值中的数值 下面的代码解释了设置 char bytes bytes 2 bytes 0 0x0C For the sake

随机推荐

  • 张量流“模块”对象没有属性“contrib”

    我使用pip方法安装了tensorflow 在python 2 7 debian linux上 如官方文档所示 https www tensorflow org versions r0 9 get started os setup html
  • aws apigateway lambda 始终返回 502

    我已经为我的代理服务器创建了 aws apigateway lambda 集成 当我向网关发出 get 请求时 请求已成功通过 lambda 函数也成功执行 并在输出流中写入响应 statusCode 为 200 但 apigateway
  • 以编程方式启动 EA

    我想通过 Windows 服务打开 EA 会话并在幕后执行一些操作 我使用 Repository API 但是不知道如何正确初始化它 EA Repository repository repository OpenFile C test e
  • 如何在 .ashx 上手动创建 ODataQueryOptions

    我想重建我的上一个项目 过去 我没有使用任何 Web API 我可以使用 ODataQueryOptions 来执行 filter orderby top skip 操作吗 对于我自己的 handler ashx 中的查询 就像是 var
  • e.preventdefault();不工作

    我真的很难得到e preventDefault 上班 这是我的代码 ListSnapshot a live click function e var url this attr href WebPartWPQ2 ms listviewtab
  • 在 MKMapView 上安装注释,同时保持用户位置居中

    我正在尝试将所有注释放入我的MKMapView同时将当前用户位置保持在地图中心 已经有很多参考资料 1 2 介绍如何缩小区域以适合地图上的注释 但它们会调整当前的中心位置 例如如果所有注释都位于我当前用户位置的东部 它将进行调整 以便当前用
  • 在现有数据库上使用 liquibase

    我们有一个正在生产的现有数据库 我们决定使用 liquibase 进行所有进一步更新并创建任何新数据库 例如开发或集成 我们根据现有的生产模式创建了 liquibase 脚本 以创建任何新的数据库 如开发 集成等 除了该脚本之外 我们还添加
  • 当终止使用 python 子进程 Popen 启动的进程时,如何关闭标准输出管道?

    我想知道当杀死在不同线程中启动的子进程时是否可以关闭通信管道 如果我不调用communicate 那么kill 将按预期工作 在一秒而不是五秒后终止进程 我发现了类似问题的讨论here http bugs python org issue4
  • 从绘图 3d 图中抓取相机位置

    我正在绘制 3D 图形并想要调整相机位置 对我来说最好的方法是使用查看器 根据需要缩放和旋转场景 然后以 JSON 形式获取相机位置并将其放入我的脚本中 该脚本生成图片以默认实现相同的位置 根据这条推文 https twitter com
  • 缓存反射属性 getter/setter 的最佳方法?

    我知道反射可能会很昂贵 我有一个经常获取 设置属性的类 我想到的一种方法是以某种方式缓存反射 我不确定我是否应该缓存表达式或在这里真正做什么 这就是我目前正在做的事情 typeof T GetProperty propName SetVal
  • 如何使用 ie8 检测文本输入何时发生变化

    我想检测文本输入何时发生变化 我尝试了这些 在 Firefox 中有效 但在 ie 8 中无效 taskSearch bind input function alert this val taskSearch live input func
  • 防止手动添加的库被ndk-build删除

    我有一个项目正在重用预编译的本机库 libocr so 但我没有源文件 我手动将库放在项目的 libs armeabi 上 一切正常 然后我需要为同一个项目创建一个新的本机库 我将源代码与 Android mk 文件一样放在 jni 文件夹
  • itertool 中列表的条件笛卡尔积

    我有四个清单 LISTA A1 A2 LISTB B1 C B2 D LISTC C1 C2 LISTD D1 D2 我想要得到的笛卡尔积LISTA and LISTB 然后根据 B 的值 我想添加 C 的乘积或 D 的乘积 A1 B1 C
  • 仅使用一个映射器的 Hadoop gzip 输入文件[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 hadoop 不能分割一个大文本文件 然后使用 gzip 压缩分割的内容 https stackoverflow com questions 6511255 why cant hadoop s
  • 获取当前的 python 模块对象(按名称或其他方式)

    如果我想获取当前模块 例如要重新加载它 我会这样做 import sys sys modules name 有没有更好的方法来做到这一点 例如不涉及 name 在这种情况下 更好意味着更惯用 更便携 更健壮 或者更多 我们通常在软件中希望的
  • 如何在Spring JPA for MySQL中设置@Id @GenerateValue的初始值?

    我不知道如何设置初始值 GenerateValue Id 我尝试过使用GenerationType SEQUENCE但这是不允许的MySQL 如何设置用于的初始值 GenerateValue 两者同时使用AUTO and TABLE我仍然无
  • magento 的 customer.xml 布局文件中的附加参数

    我正在尝试通过空白主题中的 customer xml 文件 这是在 Magento 1 4 1 1 中 向顶级客户链接 我的帐户 我的购物车等 添加一些解释性文本 我认为magento通过发出afterText或beforeText参数具有
  • 如何在不破坏localStorage中类型的情况下存储和获取对象?

    我正在使用 TypeScript 开发 AngularJS 项目 A person是一个对象Person班级 我需要存储person对象在localStorage并用它的类型检索它 窗口本地存储 https developer mozill
  • Android 创建日历事件

    我需要为 Android 应用程序创建多个日历事件 使用这个question https stackoverflow com questions 3721963 how to add calendar events in android 4
  • 从 C# 中的文本文件中读取数字

    这应该是很简单的事情 我只想从由空格分隔的标记组成的文本文件中读取数字和单词 在 C 中如何做到这一点 例如 在 C 中 以下代码可以读取整数 浮点数和字 我不想使用正则表达式或编写任何特殊的解析代码 ifstream in file tx