ServerName, IPAddress, Gateway, Notes
ServerA, 192.168.1.100, 192.168.1.1, This is some server
ServerB, 192.168.1.110, 192.168.1.1, This is some other server
ServerC, 192.168.1.120, 192.168.1.1, This is some other other server
None of our Perl experts are jumping on this, so I guess I'll give it a try. This is what I wrote:
$
$ cat readr
#! /usr/bin/perl -w
$_ = <STDIN>;
chomp;
@fields = split ',';
for ($i=0 ; $i < $#fields; $i++) {
$fields[$i] =~ s/^ *//;
print "field $i = $fields[$i] \n";
}
$j = 0;
while (<>) {
chomp;
print "line = $_ \n";
@data = split ',';
for ($i=0; $i < $#data; $i++) {
$data[$i] =~ s/^ *//;
$array = $fields[$i]; # How to combine these
$$array[$j] = $data[$i]; # two lines?
}
$j++;
}
for ($i=0 ; $i <= $#ServerName; $i++) {
print "ServerName $i = $ServerName[$i] \n";
}
$ ./readr < data1
field 0 = ServerName
field 1 = IPAddress
field 2 = Gateway
line = ServerA, 192.168.1.100, 192.168.1.1, This is some server
line = ServerB, 192.168.1.110, 192.168.1.1, This is some other server
line = ServerC, 192.168.1.120, 192.168.1.1, This is some other other server
ServerName 0 = ServerA
ServerName 1 = ServerB
ServerName 2 = ServerC
$
That last loop is just to prove that I had populated an array called ServerName. Notice the two lines that I commented. I really wanted to combine them into a single line and lose that $array scalar. But I could not find the right syntax. Can anyone kick that ball over the goalline for me?
And no fair rewriting it to use a more sensible data structure. I gave the OP what he asked for. I realize the requirements are a little odd.
$
$ # print the data file
$
$ cat data1
ServerName, IPAddress, Gateway, Notes
ServerA, 192.168.1.100, 192.168.1.1, This is some server
ServerB, 192.168.1.110, 192.168.1.1, This is some other server
ServerC, 192.168.1.120, 192.168.1.1, This is some other other server
$
$ # feed it to the Perl program
$
$ ./readr < data1
field 0 = ServerName
field 1 = IPAddress
field 2 = Gateway
field 3 = Notes
line = ServerA, 192.168.1.100, 192.168.1.1, This is some server
line = ServerB, 192.168.1.110, 192.168.1.1, This is some other server
line = ServerC, 192.168.1.120, 192.168.1.1, This is some other other server
ServerName 0 = ServerA
ServerName 1 = ServerB
ServerName 2 = ServerC
IPAddress 0 = 192.168.1.100
IPAddress 1 = 192.168.1.110
IPAddress 2 = 192.168.1.120
Gateway 0 = 192.168.1.1
Gateway 1 = 192.168.1.1
Gateway 2 = 192.168.1.1
Notes 0 = This is some server
Notes 1 = This is some other server
Notes 2 = This is some other other server
$
$
Seeing code like this makes me realize that I have quite a ways to go before I master Perl. However it also makes me want to get there. Very impressive work!