我有一个文件,其中包含12列(bam文件),第11列包含ASCII代码。在一个文件中,我有多个ASCII码。我想将其转换为数字。 我认为这段代码:
perl -e '$a=ord("ALL_ASCII_CODES_FROM-FILE"); print "$a\t"'
我想创建循环来读取所有ASCII代码,这些代码位于第11列,将其转换为数字并将结果计数为一个数字。
答案 0 :(得分:4)
您需要将字符串拆分为单个字符,循环遍历每个字符,然后在循环中调用ord
。
my @codes = map ord, split //, $str;
say join '.', map { sprintf("%02X", $_) } @codes;
方便的是,unpack 'C*'
完成所有这些。
my @codes = unpack 'C*', $str;
say join '.', map { sprintf("%02X", $_) } @codes;
如果您打算以十六进制打印出来,可以使用v
中的printf
修饰符。
say sprintf("%v02X", $str);
答案 1 :(得分:4)
将字符串转换为相应ASCII码列表的自然工具是unpack:
my @codes = unpack "C*", $string;
特别是,假设您正在解析SAM file(或更常见的是FASTQ-style quality string的QUAL列,我相信正确的转换将是:
my @qual = map {$_ - 33} unpack "C*", $string;
聚苯乙烯。从你提到的“列”,我假设你实际上正在解析一个SAM文件,而不是一个BAM文件。如果我正确读取规范,BAM格式似乎没有使用+33偏移量作为质量值,所以如果你 解析BAM文件,你只需使用上面的第一个例子为此。