简体   繁体   中英

match variable name in reading each line of a file to create view ddl

I have an input file,

 TableName1.Column1 TableName1.Column2 TableName2.Column1 TableName2.Column2 TableName3.Column3 etc

I would like it read each of the line and distinguish what columns belong for TableName1 so I can build a view ddl like this: CREATE VIEW TABLENAME1 AS SELECT Column1, Column2 From TableName1; and Next will be View TableName2 etc.

my $file = "summary.csv";
open (my $FH, '<', $file) or die "Can't open '$file' for read: $!";
my @lines;
while (my $line = <$FH>) {
  push (@lines, $line);
}
close $FH or die "Cannot close $file: $!";

my $ln=@lines;


for (my $x=0; $x<$ln; $x++){
  print("---Start->\n") if($x == 0);
  print "---------------->\n";
  my $first = (split /\./, $lines[$x] )[0];
  my $second = $first;

  print "Second is: $second \n";


  if ((split /\./, $lines[$x] )[0]  eq $first )
  {
    print "Same Table: $lines[$x]";

  }
  else 

  {
    print "Next Table: $lines[$x]";

  }

  print("---End-->\n") if($x == $ln -1);
}

I'd do it something like this.

Parse the data into a data structure. I'm using an array of anonymous arrays. In the anonymous arrays, the first element is the table name and any other elements are columns.

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

my @tables;

my $curr_table = '';

# Note: I used a DATA filehandle to test this. You'll need to
# insert your file-opening code here.

while (<DATA>) {
  chomp;
  my ($table, $column) = split /\./;

  if ($table ne $curr_table) {
    push @tables, [ $table ];
    $curr_table = $table;
  }
  push @{ $tables[-1] }, $column;
}

And then walk the data structure to do whatever you want with the data (here, I'm just displaying it).

for my $t (@tables) {
  my ($table, @columns) = @{ $t };

  say "Table: table";
  say " * $_" for @columns;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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