Help me with perl script.


 
Thread Tools Search this Thread
Top Forums Programming Help me with perl script.
# 8  
Old 10-03-2011
Hi,
After your suggetion i tried by using xml::simple, i have written like this
[code]#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;

Code:
  number :1100 description: { <data>.......
</data>}.
  number code :1200 description: { <data>.......
.............
</data>}.....

but i am able to printing
trouble code : 1100
i am not able to print description like above by using my code . what should i have to do in this case.
thanks in advance.

Last edited by veerubiji; 10-06-2011 at 02:54 PM.. Reason: Code tags, please...
# 9  
Old 10-03-2011
Quote:
Originally Posted by veerubiji
but i am able to print trouble code numbers like 0435,0436,0437....
but i need to print like
Code:
trouble code :0435 description: { <dtc>.......
</dtc>}.
trouble code :0436 description: { <dtc>.......
.............
</dtc>}.....

You output still need to keep the original xml content between "<dtc>" and "</dtc>" ?
# 10  
Old 10-03-2011
Quote:
Originally Posted by veerubiji
...
I have large XML file it contains information about all diagnostic tests and their descriptions. each diagnostic test having one code like "1100" and regarding description in xml comments. for example my xml code like this
Code:
      <data>
             <testnumber>1100</testnumber>
               <cause>battery short circuit</cause>
                <description> check proper connection</description>
      </data>

like as i shown in above i have more number of tests in my xml file. now i have to create hash table using perl script. in the hash table testnumber as a key and description as a value. ...
Code:
$
$
$ cat data.xml
<foo>
  <data>
    <testnumber>1100</testnumber>
    <cause>battery short circuit</cause>
    <description>check proper connection</description>
  </data>
  <data>
    <testnumber>1200</testnumber>
    <cause>Some other cause</cause>
    <description>Some other description</description>
  </data>
</foo>
$
$
$ cat -n parsedata.pl
     1  #!perl -w
     2  use XML::Parser;
     3  my $tag;
     4  my $key;
     5  my %testnums;
     6  my $str;
     7
     8  sub handle_start {
     9    my ($parseinst, $element, %attrs) = @_;
    10    $tag = $element;
    11  }
    12  sub handle_end {
    13    my ($parseinst, $element, %attrs) = @_;
    14    $tag = "";
    15  }
    16  sub handle_char {
    17    my ($parseinst, $data) = @_;
    18    if (defined $tag and $tag eq "testnumber") {
    19      $key = $data;
    20    } elsif (defined $tag and $tag eq "description") {
    21      $testnums{$key} = $data;
    22    }
    23  }
    24
    25  {
    26    local $/=undef;
    27    open (FH, "<", "data.xml") or die "Can't open file: $!";
    28    $str = <FH>;
    29    close (FH) or die "Can't close file: $!";
    30  }
    31  $p1 = XML::Parser->new(Handlers => {Start => \&handle_start,
    32                                      End   => \&handle_end,
    33                                      Char  => \&handle_char});
    34  $p1->parse($str);
    35
    36  # print the hash
    37  while (my ($k, $v) = each %testnums) {
    38    print "Key = $k, Value = $v\n";
    39  }
$
$ perl parsedata.pl
Key = 1200, Value = Some other description
Key = 1100, Value = check proper connection
$
$

tyler_durden
# 11  
Old 10-04-2011
Quote:
Originally Posted by MacMonster
You output still need to keep the original xml content between "<dtc>" and "</dtc>" ?
yes, i need to keep original xml data as same as it is . but my output must be testnumber and according description below like that.

---------- Post updated at 10:32 PM ---------- Previous update was at 10:29 PM ----------

Quote:
Originally Posted by MacMonster
You output still need to keep the original xml content between "<dtc>" and "</dtc>" ?
yes

---------- Post updated 10-04-11 at 09:07 AM ---------- Previous update was 10-03-11 at 10:32 PM ----------

Quote:
Originally Posted by durden_tyler
Code:
$
$
$ cat data.xml
<foo>
 <data>
   <testnumber>1100</testnumber>
   <cause>battery short circuit</cause>
   <description>check proper connection</description>
 </data>
 <data>
   <testnumber>1200</testnumber>
   <cause>Some other cause</cause>
   <description>Some other description</description>
 </data>
</foo>
$
$
$ cat -n parsedata.pl
    1  #!perl -w
    2  use XML::Parser;
    3  my $tag;
    4  my $key;
    5  my %testnums;
    6  my $str;
    7
    8  sub handle_start {
    9    my ($parseinst, $element, %attrs) = @_;
   10    $tag = $element;
   11  }
   12  sub handle_end {
   13    my ($parseinst, $element, %attrs) = @_;
   14    $tag = "";
   15  }
   16  sub handle_char {
   17    my ($parseinst, $data) = @_;
   18    if (defined $tag and $tag eq "testnumber") {
   19      $key = $data;
   20    } elsif (defined $tag and $tag eq "description") {
   21      $testnums{$key} = $data;
   22    }
   23  }
   24
   25  {
   26    local $/=undef;
   27    open (FH, "<", "data.xml") or die "Can't open file: $!";
   28    $str = <FH>;
   29    close (FH) or die "Can't close file: $!";
   30  }
   31  $p1 = XML::Parser->new(Handlers => {Start => \&handle_start,
   32                                      End   => \&handle_end,
   33                                      Char  => \&handle_char});
   34  $p1->parse($str);
   35
   36  # print the hash
   37  while (my ($k, $v) = each %testnums) {
   38    print "Key = $k, Value = $v\n";
   39  }
$
$ perl parsedata.pl
Key = 1200, Value = Some other description
Key = 1100, Value = check proper connection
$
$

tyler_durden



reply,
Thank you very much for your reply and i tried this one it prints the description line only but under description i need to print the xml original data as it is. like
testcode :1100
description: <data>
<testnumber>1100</testnumber>
<cause>battery short circuit</cause>
<description> check proper connection</description>
</data>
testcode :1200
description: <data>
<testnumber>1200</testnumber>
<cause>battery short circuit</cause>
<description> check proper connection</description>
</data>.............
like this. thanks in advance.
# 12  
Old 10-04-2011
Code:
#!/usr/bin/perl

use warnings;
use strict;
use XML::Simple;

my %data = %{XMLin('yourdata.xml')};
print "testcode: ".$data{'Testnumber'}."\n";
print "description: ".XMLout(\%data, RootName => 'data', NoAttr => 1)."\n";

exit(0);

This assumes the xml file contains only one element. The output looks like this:

*** Deleted ***

Last edited by MacMonster; 10-06-2011 at 03:18 PM.. Reason: veerubiji requested to remove the output code
# 13  
Old 10-04-2011
Post your sample input and expected output within code tags.
I am unable to understand your expected output because the text of your post runs into your output.

Click the hyperlink below to read the guidelines for adding code tags.

The UNIX and Linux Forums - Forum Rules

tyler_durden
# 14  
Old 10-04-2011
---------- Post updated at 07:15 PM ---------- Previous update was at 07:13 PM ----------

[QUOTE=MacMonster;302561528]
Code:
#!/usr/bin/perl

use warnings;
use strict;
use XML::Simple;

This assumes the xml file contains only one element. The output looks like this:

[code]



Hi, thank you very much for helping and my outpuy same like this but more number of tests. i need to print all tests and descriptions like same as above. i will try this one.

Last edited by veerubiji; 10-06-2011 at 02:58 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

PERL: In a perl-scripttTrying to execute another perl-script that SETS SOME VARIABLES !

I have reviewed many examples on-line about running another process (either PERL or shell command or a program), but do not find any usefull for my needs way. (Reviewed and not useful the system(), 'back ticks', exec() and open()) I would like to run another PERL-script from first one, not... (1 Reply)
Discussion started by: alex_5161
1 Replies

2. Shell Programming and Scripting

Excuting perl script from within a perl script with variables.

Not sure what I am doing wrong here, but I can print the list with no issue. Just a blank screen with the 'do'. #!/usr/bin/perl open FILE, "upslist.txt"; while ($line=<FILE>){ if ($line=~/^(.*?),(.*?)$/){ #print "ups:$1 string:$2\n"; do 'check_snmp_mgeups-0.1.pl -H $1 -C $2'; } ... (1 Reply)
Discussion started by: mrlayance
1 Replies

3. Shell Programming and Scripting

Perl : embedding java script with cgi perl script

Hi All, I am aware that html tags can be embedded in cgi script as below.. In the same way is it possible to embed the below javascript in perl cgi script ?? print("<form action="action.htm" method="post" onSubmit="return submitForm(this.Submitbutton)">"); print("<input type = "text"... (1 Reply)
Discussion started by: scriptscript
1 Replies

4. Shell Programming and Scripting

executing perl script from another perl script : NOT WORKING

Hi Folks, I have 2 perl scripts and I need to execute 2nd perl script from the 1st perl script in WINDOWS. In the 1st perl script that I had, I am calling the 2nd script main.pl =========== print "This is my main script\n"; `perl C:\\Users\\sripathg\\Desktop\\scripts\\hi.pl`; ... (3 Replies)
Discussion started by: giridhar276
3 Replies

5. Shell Programming and Scripting

calling a perl script with arguments from a parent perl script

I am trying to run a perl script which needs input arguments from a parent perl script, but doesn't seem to work. Appreciate your help in this regard. From parent.pl $input1=123; $input2=abc; I tried calling it with system("/usr/bin/perl child.pl $input1 $input2"); and `perl... (1 Reply)
Discussion started by: grajp002
1 Replies

6. Shell Programming and Scripting

HELP on Perl array / sorting - trying to convert Korn Shell Script to Perl

Hi all, Not sure if this should be in the programming forum, but I believe it will get more response under the Shell Programming and Scripting FORUM. Am trying to write a customized df script in Perl and need some help with regards to using arrays and file handlers. At the moment am... (3 Replies)
Discussion started by: newbie_01
3 Replies

7. Shell Programming and Scripting

Perl :How to print the o/p of a Perl script on console and redirecting same in log file @ same time.

How can i print the output of a perl script on a unix console and redirect the same in a log file under same directory simultaneously ? Like in Shell script, we use tee, is there anything in Perl or any other option ? (2 Replies)
Discussion started by: butterfly20
2 Replies

8. Shell Programming and Scripting

perl/unix: script in command line works but not in perl

so in unix this command works works and shows me a list of directories find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt but when i try running a perl script to run this command my $query = 'find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt';... (2 Replies)
Discussion started by: kpddong
2 Replies

9. Shell Programming and Scripting

[Perl] Accessing array elements within a sed command in Perl script

I am trying to use a script to replace the header of each file, whose filename are stored within the array $test, using the sed command within a Perl script as follows: $count = 0; while ( $count < $#test ) { `sed -e 's/BIOGRF 321/BIOGRF 332/g' ${test} > 0`; `cat 0 >... (2 Replies)
Discussion started by: userix
2 Replies

10. Shell Programming and Scripting

Perl: Run perl script in the current process

I have a question regarding running perl in the current process. I shall demonstrate with an example. Look at this. sh-2.05b$ pwd /tmp sh-2.05b$ cat test.sh #! /bin/sh cd /etc sh-2.05b$ ./test.sh sh-2.05b$ pwd /tmp sh-2.05b$ . ./test.sh sh-2.05b$ pwd /etc sh-2.05b$ So... (10 Replies)
Discussion started by: vino
10 Replies
Login or Register to Ask a Question