I don't know what you mean with "recend", I could not find this word in my dictionary, so I simply used a closing curly bracket (}) as the point where the script will skip reading the input file. It will start processing when it finds the string "_def:"
This is what I've done so far, but I think you will have to adjust it for your needs e.g. add standard length for file types which are not present in this header file. However it should at least give you some inspiration.
I don't know how it will perform when processing other header files...
Code:
$ cat nheader.h
//****************************************************************************
//
// sample.h file definition
//
//****************************************************************************
//
//
//
//
#ifndef ONE_H
#include <one.h>
#endif
abc
class sample_def:public user
{
public:
//start of record layout--------------------------------------------------------
char name[23]; // Name
char address[125]; // relevant address
short age; // age
short entries; // no. of entries
struct one
{
short age; // end date
float salary; // min margin
}value[10];
//end of record layout--------------------------------------------------------
char end; // end of the record
/*********************************/
char *disp(char *two)
/*********************************/
{
return;
}
};
$
Code:
$ perl readhead.pl
$
$ cat nheader.csv
Name of the file: nheader.h
Id,Type,Size
name,char,23
address,char,125
age,short,2
entries,short,2
StructID,Type,Size
age,short,2
salary,float,4
$
Code:
#!/usr/bin/perl
use strict;
use warnings;
my @array1;
my @array2;
my $start=0;
my @elements;
my $size='';
my $infile='nheader.h';
my $outfile='nheader.csv';
open(INF,$infile) or die "Error opening infile $infile: $!\n";
my @array=<INF>;
close(INF);
foreach (@array) {
chomp;
push @array1, "$_\n" if $_ !~ /^\/\// && $_ !~ /^#/ && $_ !~ /^$/;
}
EXIT: foreach (@array1) {
chomp;
if ($_ =~ /_def:/)
{
$start=1;
next;
}
elsif ($start != 1)
{
next;
}
elsif ($_ =~ /}/)
{
last EXIT;
}
else
{
push @array2, "$_\n" if $_ !~ /{/ && $_ !~ /:/;
}
}
open(OUT,">$outfile") or die "Error opening outfile $outfile: $!\n";
print OUT "Name of the file: $infile\n";
print OUT "Id,Type,Size\n";
foreach (@array2) {
chomp;
$_ =~ s/\t//g;
$_ =~ s/;.*//g;
$_ =~ s/ / /g;
if ($_ =~ /\[/) {
@elements = split(/ /, $_);
my $type = $elements[0];
my $name = $elements[1];
my $size = $elements[1];
$name =~ s/\[.*//;
$size =~ s/.*\[//;
$size =~ s/\].*//;
print OUT "$name,$type,$size\n";
}
else {
@elements = split(/ /, $_);
if ($elements[0] eq "struct") {
print OUT "StructID,Type,Size\n";
next; }
if ($elements[0] eq "char") {
$size = 1; }
if ($elements[0] eq "short") {
$size = 2; }
if ($elements[0] eq "float") {
$size = 4; }
print OUT "$elements[1],$elements[0],$size\n";
}
}
close(OUT);
This User Gave Thanks to pseudocoder For This Post:
HI
I need to read each line (test.txt) and store it in a array (@test)
How to do it in perl.
Suppose i have a file test.txt. I have to read each line of the test.txt file and store it in a array @test. How to do it in perl.
Regards
Harikrishna (3 Replies)
Hi,
I am new to perl.
I want to read from a file on the basis of some conditions..
I want to define parameters in a configuration file in such a manner like...
etc..
in my perl script, theer is a variable like this..
then i want to read values from first if block from the file... (1 Reply)
Hi!
I have a need to do this in Perl.
script.pl -config file
The script would be doing a wget/LWP on a URL which is defined in the config file.
So when I run the script it should return either one of these conditions -
1) OK with exit status 0.
Should also print "wget URL"
2)... (6 Replies)
Need perl script, data file will be csv format.
I have text file contains 2 colums.
Filename Foldernumber
aaaa 13455
bbbb 23465
cccc 26689
I have two location 1. files present and 2. folders present. I need to search for file and folder if folder... (3 Replies)
This is one of the strangest things that's happening to me.
I'm writing a new Perl script that is trying to read a file.
The file is originally in .mof format, but I also saved the contents into a .txt file.
As a simple test, I wrote this:
#!/user/bin/perl -w
use strict;
... (3 Replies)
If a form's action is the following Perl script how do I make it print the entire contents of the file on the screen?
if(param())
{
my $uploadedFile = param('file');#in the html page 'file' is the value of the name attribute of the input
my $fh = upload($uploadedFile);
... (1 Reply)
Hi,
i need a perl script which reads the file, content is given below. and output in new file.
TARGET DRIVE IO1 IO2 IO3 IO4 IO5
------------ --------- --------- --------- --------- ---------
0a.1.8 266 236 ... (3 Replies)
Good morning, I appreciate any assistance that I can get from the monks out there. I am able to get this to work for me so that I can do a hostname lookup if I only specify one hostname in the script. What I want to do is have a file with hostnames and do lookups for each name in the file. Here is... (1 Reply)
I have a file abc.ini and declared many variables in that file, one of the variable(DBname) value I am trying to read in my perl script but getting error.
File abc.ini content
# database name
DBname =UATBOX
my $ex_stat;
my $cmd_output;
$ex_stat = "\Qawk '/^DBname/{print... (2 Replies)