【问题标题】:Write to multiple output files using input file line numbers使用输入文件行号写入多个输出文件
【发布时间】:2014-08-17 02:24:26
【问题描述】:

是的,我知道标题可能不是很清楚。如果您有关于更改它的建议,请告诉我。

这是我的问题: 我有一个文件(我们称之为 File_1),其中有几行,每一行都是一个句子。

例如: File_1 内容:

*Line 1*: I'm very happy today.
*Line 2*: We're going to the cinema.
*Line 3*: I'll write on stackoverflow today!

等等..

我的问题是,如何从每一行的内容创建多个文件? 所以对于前。 file_1 将被拆分为:

*Line_1_content.txt* : I'm very happy today.
*Line_2_content.txt* : We're going to the cinema.

等等……

我真的不知道该怎么做。我从来没有遇到过这样的问题。 感谢您的帮助。

【问题讨论】:

  • 这些位“Line_1_content.txt”(和“Line 1”)是文件的一部分,还是只是解释?
  • 问题到底是什么?如何跟踪行号?您可以使用perldoc.perl.org/FileHandle.html,其中有用于跟踪行号的 input_line_number。然后你只需要在你的while循环中为每一行创建一个文件吗?除了在 perl 中读写文件非常容易。
  • 问题是如何从单个文件创建多个文件,每个文件的内容为单个文件。
  • 你真的需要把每一行放到一个单独的文件中吗?为什么?这似乎是一种非常低效的表示数据的方式。或者多行可以在同一个文件中结束吗?怎么样?
  • 当我想在另一个文件中复制一行时,我写了 print OUT $line.. OUT 可以对应“text1.txt”。但是在这种情况下,每$line OUT都会改变..如何每次都自动修改OUT文件的名称?

标签: perl file file-io


【解决方案1】:

如果我对问题的理解正确的话:

use strict;
use warnings;
use autodie;

open(my $fh, '<', 'example.txt');
while (my $line = <$fh>) {
  open(my $line_fh, '>', "line_${.}_file.txt");
  print $line_fh $line;
  close($line_fh);
}
close($fh);

应该做你想做的。

(尽管像 cmets 指出的那样,这样做可能没有多大意义)

【讨论】:

  • 你可以使用 $.获取当前行号。
  • 好点,我知道它存在,但我懒得检查哪个是包含它的变量:D
  • 好的,谢谢。所以我可以用你写的那个来替换语法 (OUT, ">", "line_${current_line}_file.txt")。我想了解有关 perl 上的目录、文件句柄的更多信息……我知道有官方文档,但是网上有更简单的教程吗?
  • 有很多关于 Perl 的信息,但遗憾的是你可以找到许多关于如何做事的旧的和坏的例子 :( 我认为 perlmaven.com/perl-tutorial 是一个很好的资源。有搜索引擎search.perlhacks.com 只从受信任的 Perl 站点中挑选结果(但我没有使用太多)
【解决方案2】:
use strict;
use warnings;
use autodie;

while ( <> ) {
    open my $fh, '>', "${.}.txt";
    print $fh $_;
}

$.对应当前行号。

你这样称呼这个程序:perl prog.pl your_file

【讨论】:

    【解决方案3】:

    你甚至不需要程序 :-)

    perl -ne 'open my $fh, ">", "Line_${.}_content.txt"; print $fh $_"' your_file_here
    

    或者,也许,

    perl -pe 'open my $fh, ">", "Line_${.}_content.txt"; select $fh' your_file_here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 2014-10-18
      • 1970-01-01
      • 2016-07-13
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多