我正在尝试将每行的第一个十进制单词转换为二进制,而不会影响任何其他单词。
我的代码如下:
use strict;
use warnings;
open (tf, "dec.txt");
open (out1, " > bin.txt");
while (my $line = <tf>){
my $binary_number = sprintf("%03b", $line);
print out1 " $binary_number\n";
}
close (tf);
输入文件示例:
3 4 5
6 7 2
1 2 3
预期输出:
011 4 5
110 7 2
001 2 3
来自代码的o / p:
011
110
001
是否有任何建议按预期输出实现o / p文件?我在这里缺少其他单词。那些我想打印的单词。
还有另一个问题: 有没有办法读取单个列(不是行)?
例如在上面的o / p第1栏......
0
1
0
答案 0 :(得分:2)
perl -pe 's/^(\d+)/sprintf("%03b",$1)/e' inputfile.txt
s///e
将作为Perl代码执行替换,并将匹配替换为结果,其余部分保持不变。
perl -pe 's/^(\d).*/$1/' inputfile.txt
表示第一个字符,但有更简单的非正则表达方式:
cut -c1 inputfile.txt
答案 1 :(得分:1)
使用<?php
$queryid = isset($_GET['id']) ? $_GET['id'] : '';
?>
<form action="reply.php?id=<?php echo htmlspecialchars($queryid); ?>" method="POST" class="form-horizontal" role="form">
(自动分割模式)拆分空格,但只修改转换后的第一列,并打印其他列不变:
-a
输出:
$ perl -wane '$F[0] = sprintf("%03b", $F[0]); print "@F\n";' input.txt
答案 2 :(得分:0)
you can split to get the first column and use sprintf to convert decimal to binary number
use lexical filehandle so that u can avoid closing the filehandle.
select is used to write the content to a new file.
#!/usr/bin/perl
use strict;
use warnings;
open my $fh, '<',"num.txt" || die "$!";
open my $wh , '>',"op.txt" || die "$!";
select ($wh);
while (my $line = <$fh>)
{
chomp($line);
my @aRR = split (/\s/,$line);
my $bin = sprintf("%03b",$aRR[0]);
print $bin," ",$aRR[1]," ", $aRR[2],"\n";
}
答案 3 :(得分:-1)
您可以使用regex anchors来实现您的目标。像^\d
这样的正则表达式会匹配一行开头的单个数字。
如果您需要支持多位数字(例如15或123),您可以添加重复运算符:^\d+
将匹配行开头的任何多位数字。