繁体   English   中英

打印到文本文件时删除Perl中的空格

[英]Removing Spaces in Perl when Printing to a text file

所以我在perl中有这段代码来解析xml,我希望将perl文件输出到文本文件中,以便所有内容都在如下列中:

SpectrumIndex TotalIonCount Duration Spectrum 
Integer Float Float mass,abundance;mass1,abundance1;mass 2,abundance1

这是xml代码:

<message>
       <cmd id="result_data">
          <result-file-header>
                 <path>String</path>
                 <duration>Float</duration>
                 <spectra-count>Integer</spectra-count>
          </result-file-header>
          <scan-results count="Integer">
                 <scan-result>
                 <spectrum-index>Integer</spectrum-index>
                 <time-stamp>Integer</time-stamp>
                 <tic>Float</tic>
                 <start-mass>Float</start-mass>
                 <stop-mass>Float</stop-mass>
                 <spectrum count="Integer">mass,abundance;mass1,abundance1;
                 mass2,abundance2;mass6,abundance6</spectrum>
                 </scan-result>
                 <scan-result>
                 <spectrum-index>Integer</spectrum-index>
                 <time-stamp>Integer</time-stamp>
                 <tic>Float</tic>
                 <start-mass>Float</start-mass>
                 <stop-mass>Float</stop-mass>
                 <spectrum count="Integer">mass3,abundance3;mass4,abundance4;
                 mass5,abundance5</spectrum>
                 </scan-result>
            </scan-results>
    </cmd>
</message>

但是,使用以下perl代码:

#!/usr/bin/perl-w
#example to write to text
my $file = "gapiformat.txt";
unless(open FILE, '>'.$file) {
    die "\nUnable to create $file\n";
}
use strict;
use warnings;
use XML::Simple;
use Data::Dumper;


 my $values= XMLin('samplegapi.xml',ForceArray => ['scan-result','result-file-header']);


my $results = $values->{'cmd'}->{'scan-results'}->{'scan-result'};
my $results1= $values->{'cmd'}->{'result-file-header'};

printf FILE ("%-s %-s %-s %s\n","SpectrumIndex","TotalIonCount","Spectrum","Duration");
for my $data (@$results) {
    my $spectrum=$data->{spectrum};
    for my $data1 (@$results1){    
    printf FILE ("%-s %-s %-s %-s\n",$data->{"spectrum-index"}, $data->{tic}, $spectrum          
->{'content'},$data1->{duration});
    }   
  }

将以下输出提供给文本文件:

 SpectrumIndex TotalIonCount Spectrum Duration
 Integer Float mass,abundance;mass1,abundance1;
                 mass2,abundance2;mass6,abundance6 Float
 Integer Float mass3,abundance3;mass4,abundance4;
                 mass5,abundance5 Float

任何帮助表示赞赏!

只需在printf中输入想要的字符数即可:

printf FILE ("%20s %20s %40s %10s\n",...)
  1. 在现代Perl中:

    • 您使用open()的三个参数形式
    • 您使用my变量而不是裸字文件句柄
    • 当出现问题时,您将输出系统错误消息( $! ):

     open my $INFILE, '<', $fname or die "Couldn't open $fname: $!"; 
  2. 您必须逐行打印。 您不能先打印一栏,然后再打印另一栏。
    因此,当您执行此操作时:

     printf FILE ( "%-s %-s %-s %-s\\n", $data->{"spectrum-index"}, $data->{tic}, $spectrum->{'content'}, $data1->{duration} ); 

    ...那么当然所有这些数据都将在一行上。

我想通了...我只是用过:

my $content=$spectrum->{'content'};
$content=~s/\s+$//g

那成功了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM