-1
如果行IN(..)
和行OUT(..)
在其括號中具有相同的字符串,請刪除行OUT(..)
。刪除包含相同字符串的行
我的輸入文件是這樣的:
IN(ABC);
IN(DEF);
IN(FGH);
OUT(QWE);
OUT(ABC);
OUT(DEF);
我所需的輸出是:
IN(ABC);
IN(DEF);
IN(FGH);
OUT(QWE);
如果行IN(..)
和行OUT(..)
在其括號中具有相同的字符串,請刪除行OUT(..)
。刪除包含相同字符串的行
我的輸入文件是這樣的:
IN(ABC);
IN(DEF);
IN(FGH);
OUT(QWE);
OUT(ABC);
OUT(DEF);
我所需的輸出是:
IN(ABC);
IN(DEF);
IN(FGH);
OUT(QWE);
在假設所有IN(...)
線是OUT(...)
線之前(即排序),下面應該工作:
my %in;
while (<DATA>) {
if (/^IN\((.*?)\)/) {
$in{$1} = 1;
} elsif (/^OUT\((.*?)\)/) {
if ($in{$1}) {
next;
}
}
print $_;
}
__DATA__
IN(ABC);
IN(DEF);
IN(FGH);
OUT(QWE);
OUT(ABC);
OUT(DEF);
這個想法是使用散列來跟蹤其中IN
值已被使用。逐行瀏覽數據,如果是IN
行,則存儲該值並打印行。如果它是OUT
行,但它不在已識別的IN
值的列表中,請將其打印出來,否則請跳過它。
雖然這可能有效,但它是各種各樣的錯誤。請至少使用'嚴格'和'使用警告'全部',並看看[perlstyle](http://perldoc.perl.org/perlstyle.html) – Borodin
爲什麼這是「各種各樣的錯誤」,doesn它會回答這個問題嗎?它效率低下嗎?爲什麼要對這樣一個簡短的代碼段使用strict/warnings?沒有警告,只有11行代碼。 – kba