gpt4 book ai didi

perl - Perl 中的递归搜索?

转载 作者:行者123 更新时间:2023-12-02 08:11:33 25 4
gpt4 key购买 nike

我对 Perl 非常陌生,从来都不是一个出色的程序员。我有一些成功的 BVA 例程来控制微处理器功能,但从来没有任何嵌入式或多方面的东西。无论如何,我今天的问题是关于一个我无法克服的难题,当我试图弄清楚如何从我创建的文本文件中删除重复的文本行时。

文件中可能有几行相同的 txt 行,而不是按顺序放置,这是有问题的,因为我实际上是逐行比较文件本身。因此,如果第一行和第三行相同,我会将第一行写入新文件,而不是第三行。但是当我比较第三行时,我会再写一遍,因为我当前的代码“忘记”了第一行。我确信有一种简单的方法可以做到这一点,但我在简化代码方面遇到了问题。这是代码:

my $searchString = pseudo variable "ideally an iterative search through the source file";
my $file2 = "/tmp/cutdown.txt";
my $file3 = "/tmp/output.txt";
my $count = "0";

open (FILE, $file2) || die "Can't open cutdown.txt \n";
open (FILE2, ">$file3") || die "Can't open output.txt \n";
while (<FILE>) {
print "$_";
print "$searchString\n";
if (($_ =~ /$searchString/) and ($count == "0")) {
++ $count;
print FILE2 $_;
} else {
print "This isn't working\n";
}
}
close (FILE);

close (FILE2);

请原谅文件句柄和标量不匹配的方式。这是一项正在进行的工作......:)

最佳答案

检查唯一性的秘诀是将您看到的行存储在哈希中,并且只打印哈希中不存在的行。

稍微更新您的代码以使用更现代的做法(三参数 open(),词法文件句柄)我们得到这个:

my $file2 = "/tmp/cutdown.txt";
my $file3 = "/tmp/output.txt";

open my $in_fh, '<', $file2 or die "Can't open cutdown.txt: $!\n";
open my $out_fh, '>', $file3 or die "Can't open output.txt: $!\n";

my %seen;

while (<$in_fh>) {
print $out_fh unless $seen{$_}++;
}

但我会把它写成一个 Unix 过滤器。从 STDIN 读取并写入 STDOUT。这样,您的程序就更加灵活。整个代码变为:

#!/usr/bin/perl

use strict;
use warnings;

my %seen;

while (<>) {
print unless $seen{$_}++;
}

假设这是在一个名为 my_filter 的文件中,您可以将其命名为:

$ ./my_filter < /tmp/cutdown.txt > /tmp/output.txt

更新:但这并不使用您的$searchString 变量。我不清楚那是干什么用的。

关于perl - Perl 中的递归搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46489105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com