在 Ruby 中解析文件时跳过行的最快方法?

2024-01-09

我尝试寻找这个,但找不到太多。这似乎是以前可能被问过的问题(很多次?),所以如果是这样的话,我深表歉意。

我想知道在 Ruby 中解析文件某些部分的最快方法是什么。例如,假设我know我想要的特定函数的信息位于 1000 行文件的第 500 行和 600 行之间。 (显然这种问题是针对大文件的,我只是为了举例而使用那些较小的数字),因为我知道它不会出现在上半部分,有没有一种快速的方法可以忽略该信息?

目前我正在使用类似的东西:

while  buffer = file_in.gets and file_in.lineno <600
  next unless file_in.lineno > 500
  if buffer.chomp!.include? some_string
    do_func_whatever
  end
end

它确实有效,但我就是忍不住认为它可以更好地工作。

我对 Ruby 很陌生,并且有兴趣学习用 Ruby 做事的新方法。


file.lines.drop(500).take(100) # will get you lines 501-600

通常,您无法避免从头开始读取文件直到您感兴趣的行,因为每行的长度都可以不同。不过,您可以避免的一件事是将整个文件加载到一个大数组中。只需逐行阅读,数数,然后丢弃它们,直到找到您想要的内容。很像你自己的例子。你可以让它变得更加Rubyish。

附言。铁皮人的评论让我做了一些实验。虽然我没有找到任何理由drop加载整个文件,确实有问题:drop returns文件的其余部分在数组中。这是可以避免这种情况的方法:

file.lines.select.with_index{|l,i| (501..600) === i}

PS2:哦,上面的代码虽然没有创建一个巨大的数组,但会迭代整个文件,甚至是 600 以下的行。:( 这是第三个版本:

enum = file.lines
500.times{enum.next} # skip 500
enum.take(100) # take the next 100

或者,如果您更喜欢 FP:

file.lines.tap{|enum| 500.times{enum.next}}.take(100)

不管怎样,这段独白的好处是你可以学习多种迭代文件的方法。 ;)

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

在 Ruby 中解析文件时跳过行的最快方法? 的相关文章

  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • 使用 attr_accessor 动态创建类属性

    在Ruby中 有没有办法动态地将实例变量添加到类中 例如 class MyClass def initialize create attribute name end def create attribute name attr acces
  • 如何从 ruby​​ 中的字符串中删除所有非数字?

    用户输入数字的形式如下 1 800 432 4567 800 432 4567 800 432 4566 800 432 4567 1 800 432 4567 800 432 4567 我希望所有这些都变成没有特殊字符的剥离版本 例如18
  • REXML - 如何提取单个元素

    我正在用 ruby 编写一些验收测试 其中涉及断言响应 XML 中值的存在 我的 XML 是这样的
  • Nokogiri 保持 HTML 实体不变

    我希望 Nokogiri 保持 HTML 实体不变 但它似乎正在将实体转换为实际的符号 例如 Nokogiri HTML fragment p reg p to s 结果是 p p 似乎没有什么可以将原始 HTML 返回给我 inner h
  • Rails - 渲染:目标锚标记的操作?

    我希望像这样使用渲染 render action gt page form 我也尝试过这个 render template gt site page form 那也没用 这个特定页面上的表单位于最底部 如果提交时发生任何错误 我不希望用户被
  • Bundle 说 gem 丢失了 - 但事实并非如此?

    背景 我正在维护contentRuby On Rails 站点 但我确实没有 Rails 的经验 当尝试运行 Rails 服务器时 rails s我明白了 在任何来源中均找不到 activesupport 3 2 0 Run bundle
  • 红宝石接球和效率

    catch在 Ruby 中意味着跳出深度嵌套的代码 在 Java 中 例如用Java也可以达到同样的效果try catch用于处理异常 但它被认为是糟糕的解决方案 而且效率非常低 在 Ruby 中 我们有处理异常的方法begin raise
  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • Ruby 中的 DateTime.parse() 是否依赖于语言环境?

    我想知道以下示例的输出 解析时01 03 它会被解决为Mar 1st or Jan 3rd Ruby 不依赖于语言环境 因为红宝石是一个服务器端语言而不是客户端像 JavaScript 一样的语言 Ruby 使用系统时钟yourWeb 应用
  • 如何从 Ruby 中的特定相对路径加载文件?

    我正在制作一颗供内部使用的宝石 在其中 我从另一个目录加载一些 YAML in
  • Shoulda/RSpec 匹配器 - 条件验证

    在我的代码中 我使用 Shoulda 匹配器进行了以下验证 效果很好 it should validate presence of name 在我的模型中 我已将条件添加到验证中 validates presence of name if
  • 如何使用 ruby​​ 和命令行工具在 mavericks 中正确安装 cocoapod?

    这是我的设置 小牛队10 9 1 Xcode 5 0 2 哪个红宝石返回这个 Users quique123 rvm rubies ruby 1 9 3 p194 bin ruby 但 dvm install ruby 返回 Already
  • sqlite3-ruby gem:无法构建 gem 本机扩展

    Update 看看这个后续问题 Windows 上的 Gem 更新 它坏了吗 https stackoverflow com questions 134581 gem update on windows is it broken 在 Win
  • ruby 中 Array#uniq 方法的时间复杂度是多少?

    谁能告诉我 ruby 内部使用哪种算法来使用 ruby 数组删除重复项Array uniq method 来自docs http www ruby doc org core 1 9 3 Array html static VALUE rb
  • ruby rspec 不能与 simplecov 一起使用

    我安装了 simplecov gem 并添加了 require simplecov SimpleCov start 到spec helper rb文件 现在如果我在some file spec rb文件中包含spec helper rb并尝
  • ruby 字符串到哈希值的转换

    我有一个这样的字符串 str uu p xx m yy n zz m 我想知道如何将给定的字符串转换为哈希值 即我的实际要求是 有多少个值 符号之前 有m n和p 我不需要计数 我需要一个精确的值 这样输出效果会更好 m gt xx zz
  • 返回两个文件之间不同的行 (Python)

    我有两个文件 每个文件都有数万行 output1 txt 和output2 txt 我想迭代这两个文件并返回两个文件之间不同的行 和内容 它们大部分是相同的 这就是为什么我找不到差异 filecmp cmp 返回 false 7 4 dif
  • 以 Rails 形式处理 MongoMapper EmbeddedDocument

    首先 我对一般编程和 Rails 都是新手 我选择 Rails 是因为它看起来是一种很容易上手的语言 对于我的项目 我将 MongoMapper 与 Rails 结合使用 我正在尝试以与文档相同的形式处理嵌入文档 我有以下模型 class

随机推荐

  • 转换数据库中嵌入的图片

    我有一个 小 问题 在数据库文档中包含富文本字段 富文本字段包含某个联系人的个人资料图片 问题是这个内容没有保存为 mime 因此我无法计算图像的 url 我正在使用 pojo 从人员配置文件中检索数据 并在我的 xpage 控件中使用它来
  • 编写正则表达式来检测重复字符[重复]

    这个问题在这里已经有答案了 我需要编写一个正则表达式 它可以识别一个具有重复字符集 at the end 根据以下代码片段 重复字符集为An 我需要编写一个正则表达式 以便能够发现并显示它 根据下面的代码 w将匹配任何单词字符 包括数字 字
  • 如何将 Bower 用作 Visual Studio 2013 的包管理器? IE。我有一个 .NET 项目,想要添加一些使用 Bower 的包

    如何将 Bower 用作 Visual Studio 2013 的包管理器 IE 我有一个 NET 项目 想要添加一些使用 Bower 的包 I read 斯科特 汉塞尔曼的帖子 http www hanselman com blog In
  • 数据表添加到数据集

    我需要为数据集设置一个表 DataSet ds EventDal GetEvents DataSet dsReturn new DataSet DataTable dtReturn dsReturn Tables Add dtReturn
  • 子域 Azure WebApp

    这是一个更普遍的问题 我有一个作为 Azure 应用服务运行的网站 我配置了一个自定义域 以便您可以通过以下方式调用它我的网站名称 com 随着客户的要求不断增长 每个客户都有特定的需求 我想知道是否可以为每个客户拥有一个子域 例如 cli
  • pandas + pyodbc ODBC SQL 类型 -150 尚不支持

    我知道这方面有很多主题 但我认为这是非常具体的 我得到用于审计目的的当前代码 import pandas as pd import pyodbc query Top 50 high total CPU Queries SELECT TOP
  • 在 nginx 上为应用程序添加上下文路径

    Nginx 负责从根目录到根 URL 的所有静态内容 例如 如果根内容位置配置为 usr share nginx html其中包含一个文件 usr share nginx html foo html 然后是网址http localhost
  • Zope 冲突错误

    我的网站的 zope 日志报告了许多冲突错误 平均每天120个 其中2 3个未解决 我读过很多关于为什么会发生冲突错误的文章 但没有什么是清楚的 大多数冲突错误发生在对 MySQL 数据库运行选择查询的页面上 据称 随着 http 请求并发
  • 开始 Lua 脚本编写 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正处于被迫学习Lua的阶段 所以你对我如何做到这一点有什么建议吗 除了 PHP 之外 我对其他脚本语言没有太多经验 那么 关于 head
  • django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。 (django 2.0.1)(Python 3.6)

    这是我第一次尝试将 Django 应用程序 django 2 0 1 Python 3 6 部署到 pythonanywhere 它是一个简单的组合应用程序 没有模型 没有引导程序 只需 Django HTML CSS 和 JavaScri
  • 将 prop 传递给样式组件

    我正在尝试找到一种方法来动态创建 居中此 div 组件 这段代码目前可以工作 但有点冗长而且不是很干 const Rel styled div position relative height 100 width 100 const Abs
  • iOS:根据加速度计输出准确确定碰撞能量

    我正在创建一个音叉应用程序 您可以将 iPhone 轻拍到另一只手的手掌上 或者轻拍到柔软的表面上 以设置音叉的声音 所以我想检测每个 凹凸 中包含的能量 编辑 删除了大量的gumpf 谁能帮我破解这个吗 感谢 freenode 的 mat
  • Python 中与 finditer() 的重叠匹配

    我正在使用正则表达式来匹配文本中的圣经经文引用 当前的正则表达式是 REF REGEX re compile q uote s Match optional q or quote followed by many spaces P
  • 如何在 iOS 和 Android 应用程序的 React Native 中禁用字体缩放?

    设备字体大小的放大有时会中断 样式方面 禁用字体缩放可能会损害应用程序的可访问性 理想情况下 如果您想限制使用 React Native 0 58 0 及更高版本的应用程序的缩放 使用maxFontSizeMultiplier prop h
  • HTTP 请求被视为超时的默认时间是多少?

    对于 PHP HTTP 请求被视为超时的默认时间是多少 我正在使用 PECL HTTP 扩展来发出 HTTP 请求 我可以在发出请求时设置超时限制 但是我想知道如果没有明确指定任何内容 默认值是什么 我查遍了 PHP 手册 但没有结果 我希
  • 在android中以编程方式创建vCard文件

    我使用以下代码来读取联系人并创建 vcard 文件 String lookupKey cur getString cur getColumnIndex Contacts LOOKUP KEY Uri uri Uri withAppended
  • TextInputEditText 无法转换为 TextInputLayout

    我的活动中有此代码 public class RegisterActivity extends AppCompatActivity private static final String TAG RegisterActivity class
  • 如何删除composer php中的所有测试?

    我是作曲家开发方面的新手 我刚刚开始在当前的项目中与作曲家合作 我认为我的问题之前已经被问过 或者我对作曲家很菜鸟 D 每个依赖项的供应商中有许多测试文件和目录 我只想在将其上传到服务器之前删除这些测试 是否有任何命令可以删除这些测试或者我
  • 找到第二个最接近值的索引

    我在用 index np abs array value argmin 查找数组中与某个值的绝对差值最小的索引 但是 有没有像这样的干净方法来查找second最接近该值的索引 我认为这有效 a np linspace 0 10 30 arr
  • 在 Ruby 中解析文件时跳过行的最快方法?

    我尝试寻找这个 但找不到太多 这似乎是以前可能被问过的问题 很多次 所以如果是这样的话 我深表歉意 我想知道在 Ruby 中解析文件某些部分的最快方法是什么 例如 假设我know我想要的特定函数的信息位于 1000 行文件的第 500 行和