解析固定宽度文件

2023-11-22

我有很多带有固定宽度字段的文本文件:

<c>     <c>       <c>
Dave    Thomas    123 Main
Dan     Anderson  456 Center
Wilma   Rainbow   789 Street

其余文件的格式类似,其中<c>将标记列的开头,但它们具有各种(未知)列和空间宽度。解析这些文件的最佳方法是什么?

我尝试使用Text::CSV,但由于没有分隔符,很难获得一致的结果(除非我错误地使用了模块):

my $csv = Text::CSV->new();
$csv->sep_char (' ');

while (<FILE>){
    if ($csv->parse($_)) {
        my @columns=$csv->fields();
        print $columns[1] . "\n";
    }
}

正如用户604939提到的,unpack是用于固定宽度字段的工具。然而,unpack需要传递一个模板才能使用。既然您说您的字段可以更改宽度,那么解决方案是从文件的第一行构建此模板:

my @template = map {'A'.length}        # convert each to 'A##'
               <DATA> =~ /(\S+\s*)/g;  # split first line into segments
$template[-1] = 'A*';                  # set the last segment to be slurpy

my $template = "@template";
print "template: $template\n";

my @data;
while (<DATA>) {
    push @data, [unpack $template, $_]
}

use Data::Dumper;

print Dumper \@data;

__DATA__
<c>     <c>       <c>
Dave    Thomas    123 Main
Dan     Anderson  456 Center
Wilma   Rainbow   789 Street

打印:



template: A8 A10 A*
$VAR1 = [
          [
            'Dave',
            'Thomas',
            '123 Main'
          ],
          [
            'Dan',
            'Anderson',
            '456 Center'
          ],
          [
            'Wilma',
            'Rainbow',
            '789 Street'
          ]
        ];
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析固定宽度文件 的相关文章

  • Perl 程序如何知道在哪里可以找到包含它使用的 Perl 模块的文件?

    如果我的 Perl 程序使用 Perl 模块 它将如何确定在哪里找到包含模块代码的文件 例如 如果程序包含 use MyModule1 Example 1 use This Here MyModule2 Example 2 它会看起来在哪里
  • 如何在 Perl 中获取本周的日期?

    我有以下循环来计算本周的日期并将其打印出来 它有效 但我正在考虑 Perl 中日期 时间可能性的数量 并且想听听您对是否有更好的方法的意见 这是我写的代码 usr bin env perl use warnings use strict u
  • 用于解析差异的 PHP 类

    我正在编写一个 PHP 脚本 需要解释 Git 创建的 Diff 文件 如果我想解析 Diff 文件并基本上以完全不同的格式打印它 我应该如何进行 我遇到过Text DiffPEAR 库 但该库仅创建 Diff 本身 或者更确切地说 它只需
  • 用 C/C++ 编写的通用代码补全框架

    有没有用 C C C 11 编写的框架用于编写代码补全工具 或者也许有一些库允许 Java 或 C 的代码完成 也是用 C 编写的 我正在用 C 编写我的自定义 IDE 用于 Java 而不仅仅是 Java 开发 我想以最好的方式为其添加代
  • h264 参考帧

    我正在寻找一种在 h264 流中查找参考帧的算法 我在不同的解决方案中看到的最常见的方法是查找访问单元分隔符和 IDR 类型的 NAL 不幸的是 我检查的大多数流没有 IDR 类型的 NAL 我将不胜感激的帮助 问候 雅采克 H264 帧由
  • 使用 python 将 bibtex 文件转换为 html (也许是 pybtex?)

    您好 我想解析 bibtex 出版物文件并对特定字段 例如年份 进行排序并过滤某些内容 然后将其放在网站上 我遇到了 pybtex 它可以读取和解析 bibtex 文件 但它基本上没有记录 我不知道如何对条目进行排序 pybtex 是可行的
  • 使用 isdigit 表示浮点数?

    a raw input How much is 1 share in that company while not a isdigit print You need to write a number n a raw input How m
  • 如何修复 Math::BigInt 调用的 Math::Pari 中的“`as_number' 不是 Pari 函数名称”?

    在 Perl 5 8 5 上 我看到问题中列出的错误 我正在运行这些版本模块 数学 BigInt 1 89 数学 BigInt FastCalc 0 19 数学 BigInt GMP 1 24 数学 BigInt Pari 1 13 数学
  • 如何解决 FParsec 错误“组合器‘许多’已应用于解析器,该解析器在不消耗...的情况下成功”

    我有一个看起来足够简单的解析器 我将此子解析器添加到末尾以提供有关一般解析错误的信息 因为所有其他子解析器都失败了 Read the rest of a line as an error let readError parse let re
  • Python将文本文件解析为嵌套字典

    考虑以下数据结构 HEADER1 key value key value HEADER2 key value key value HEADER3 key value HEADER4 key value key value 原始数据中没有缩进
  • perl 和 java 正则表达式功能之间有什么区别?

    perl 和 java 在支持哪些正则表达式术语方面有什么区别 这个问题仅涉及正则表达式 并且特别排除了how可以使用正则表达式 即使用正则表达式的可用函数 方法 以及语言之间的语法差异 例如java要求转义反斜杠等 特别令人感兴趣的是 j
  • Perl 中函数调用和 goto &NAME 有什么区别?

    我正在读 Perl 这很有趣 但读书时从这里转到 https www tutorialspoint com perl perl goto statement htm在 Perl 中我有一个疑问 我知道 goto 语句有三种类型 转到标签 转
  • 如何检测FTP文件传输完成?

    我正在编写一个脚本 用于轮询 FTP 站点上的文件并在可用时将它们下载到本地 文件由各个来源方随机存放到 FTP 站点 我需要一种方法能够在下载之前检测 FTP 站点上的文件是否已被源方完全传输 关于如何解决这个问题有什么想法吗 如果您可以
  • 在 C++ 中解析逗号分隔的数字

    我有一个简短的问题要问大家 我正在尝试编写一个简单的代码来从用户输入中提取数字并将其保存到 int 数组中 但我很难思考如何使其工作 下面显示的代码适用于单位数 但不适用于超过 1 位的数字 例如 如果用户输入 1 2 3 4 50 60
  • 使用 OpenNLP 获取句子的解析树。陷入困境。

    OpenNLP 是一个关于自然语言处理的 Apache 项目 NLP 程序的目标之一是解析一个句子 并给出其语法结构的树 例如 天空是蓝色的 这句话 可能会被解析为 S NP VP The sky is blue where S是句子 NP
  • 如何通过 sudo (或作为另一个用户)打开 Perl 文件句柄写入数据

    我想将数据写入文件 但应使用特定用户的访问权限打开文件句柄 因此 有以下声明 open FH gt filename or die n 将允许以该特定用户的身份写入文件 有没有办法在 Perl 脚本中执行此操作 而无需运行整个脚本sudo
  • boost::spirit::qi::语法和可变参数模板

    我在使用可变参数模板定义语法时面临一个问题 我首先定义一些包含在某些结构中的简单语法 例如纬度 经度 如下所示 include
  • PHP:解析器 asp 页面 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 早上好 我可以用 php 解析一个
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • getoptions 函数 perl 多值不起作用

    具有以下 getoptions 功能 iifiles 参数是可选的 如果提供的话它可以是一对多 但是当我运行此函数时收到错误消息 选项规范错误 Perl 在Solaris 10 上运行 不确定需要为iiles 提供哪些多值选项 GetOpt

随机推荐

  • 对 Coq 导入感到困惑

    有人可以告诉我之间的区别吗 Require Name Require Import Name Import Name Require 加载外部库 通常来自标准库或user contribs 文件夹 Import 导入模块中的名称 例如 如果
  • 将命令的输出分配给变量(BASH)

    我需要将命令的输出分配给变量 我尝试的命令是 grep UUID fstab awk ext4 print 1 awk print substr 0 6 我尝试用这段代码来分配一个变量 UUID grep UUID fstab awk ex
  • 查找重复文件并删除它们

    我正在编写一个 Python 程序来查找并删除文件夹中的重复文件 我有 mp3 文件和一些其他文件的多个副本 我使用的是sh1算法 如何找到这些重复的文件并删除它们 最快的算法 与接受的答案相比 性能提高了 100 倍 真的 其他解决方案中
  • ARC 下指向 Objective-C 对象的 C 风格指针数组

    我有一个指向 Objective C 实例的 2D 指针数组 用于跟踪地图网格上的游戏对象 现在我正在将代码转换为 ARC Xcode 指出了错误 我知道指向对象的指针不允许作为结构成员 但这让我 几乎 措手不及 我了解 ARC 限制背后的
  • 使用 git 和子模块,什么是好的文件夹结构?

    我将 git 与子模块一起使用 并且我很难弄清楚如何组织我的文件 我使用 PHP 进行开发 并使用单元测试 所以现在 我对每个模块都使用这个组织 src tests 这似乎是一个绝妙的主意 但问题是 当我对项目执行 git submodul
  • 剧作家:从非输入元素上传文件不能使用page.setInputFiles?

    我正在通过 Playwright 上的非输入 HTML 标签上传文件 例如 您可以使用setInputFiles像这样 这有效 await page setInputFiles input type file headphone png 但
  • python中的排序列表

    如果我有一个字符串列表 例如 a143 txt a9 txt 如何按列表中的数字而不是字符串按升序对其进行排序 IE 我想 a9 txt 出现在之前 a143 txt since 9 lt 143 thanks 这就是所谓的 自然排序 从h
  • Owin 如何在 Application_EndRequest 阶段之后设置 Asp.Net 身份验证 cookie?

    作为测试 我使用 Visual Studio 2013 中的最新模板创建了一个新的 Asp Net MVC5 应用程序 我将以下方法添加到 Global asax cs protected void Application PreSendR
  • Azure TopicClient 线程安全吗?

    我一直在处理来自 TopicClient 的大量超时 我认为这可能与对象生存期和处置有关 我正在使用TopicClient班级来自Microsoft ServiceBus Messaging并阅读本文最佳实践指南 states 您不应该在发
  • MYSQL 查询 - 获取与帖子相关的最新评论

    我试图获取与我下载的每篇帖子相关的最新 1 或 2 条评论 有点像 Instagram 的做法 因为它们显示每篇帖子的最新 3 条评论 到目前为止 我正在获取帖子和点赞数 现在我需要做的就是弄清楚如何获取最新的评论 不太确定如何处理它 这就
  • 比较已释放的指针是否会调用 UB?

    这似乎是一种相当常见的模式 例如在 hexchat 中 可能无法编译 另请参阅插件文档 另请注意hexchat plugin get info一直没有被使用 所以为了简单起见我省略了它 static hexchat plugin ph st
  • 如何使用 jQuery 将 Windows 身份验证传递给 Web 服务?

    我使用 jQuery 调用 Net Web 服务 如下所示 var service url https example com myservice asmx ajax type GET url service url dataType xm
  • 如何旋转数据框?

    什么是枢轴 我该如何旋转 长格式到宽格式 我见过很多关于数据透视表的问题 即使他们不知道 写一个几乎是不可能的规范问答这涵盖了旋转的所有方面 但我要尝试一下 现有问题和答案的问题在于 问题通常集中在OP难以概括的细微差别上 以便使用许多现有
  • 在从管道执行的 bash 脚本中使用 read -p

    我提前道歉 我没有完全理解我所要求的背后的想法 无法理解为什么它不起作用 我不知道我需要学什么 我首先在堆栈交换中搜索答案 我发现了一些似乎可能相关的信息 但没有很好地解释这些概念 以至于我无法理解如何构建可行的解决方案 我一直在谷歌上搜索
  • 为什么我的 PanelND 工厂抛出 KeyError?

    我使用的是 Pandas 版本0 12 0在Ubuntu上13 04 我正在尝试创建一个 5D 面板对象来包含一些按条件分割的脑电图数据 我如何选择构建数据 让我首先演示我的使用pandas core panelnd creat nd pa
  • 用户“”没有所需的权限,Windows 8 上的 SSRS 2008

    当您尝试登录 SSRS 的根站点 http 服务器名称 Reports 时 它会显示 用户 没有所需的权限 验证是否已授予足够的权限并且已解决 Windows 用户帐户控制 UAC 限制 这是在 64 位版本的 Windows 8 Pro
  • ReactJS base64 文件上传

    我在 React 组件上有这个函数 handleChangeImage function evt console log Uploading var self this var reader new FileReader var file
  • 如何在 Dart 中捕获当前的 SIGINT?

    How can Ctrl C or SIGINT be caught in a Dart program for the current process Node 的情况与此类似 process on SIGINT function do
  • Postgresql - 如果记录不存在则插入记录,如果存在则更新记录的干净方法

    这是我的情况 我有一个包含一堆 URL 的表并进行爬行 与它们相关的日期 当我的程序处理 URL 时 我想要 插入带有爬网日期的新行 如果 URL 已经存在 我 想要将爬网日期更新为当前日期时间 使用 MS SQL 或 Oracle 我可能
  • 解析固定宽度文件

    我有很多带有固定宽度字段的文本文件