baxy77bax has asked for the wisdom of the Perl Monks concerning the following question:

hi

i have this problem that has been troubling me for a while but it never cosed any real problems till now

my $line; while(<LINES>){ if (m/^--/){ push (my @data, [$id,$line]); $self->_loaddb(table => 'TABLE', data=>\@data); $line= undef; $id++; } else{ chomp(my $string = $_); $line.=$string; } } ########## file.txt --1 kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj kkkkkkkkkkkkkkk jhjhjhjhjhjhjhjhjhjhjjjj --2 kkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjjjjjjj ljdfsdhgdhgkkkkkkkkkkkkkkkkk rrrrrrrrrrr rrrrrrrrrr rrrrrrrrrrrrrrrr --3 ffffffffffffffffffffffff ggggggggggggggggggggggg fffffffffffffffffffffffffffffffff -- ################## table ------------------------ | ID | Line | |----------|-----------| | 123 | null | |----------|-----------| | 878 | kkkkk...| |----------|-----------| ...
so from the code you can see that for the first run in while loop it loads(function for loading data into db) id into table with $line variable empty. so far this wasn't a problem but since the table has been changed in a way that it doesn't support null values for lines any more, this became a problem :)

any suggestions how to import this file?

thnx

Update:

THNX , getting a bit rusty and lazy !

Replies are listed 'Best First'.
Re: problem with evaluating first line in a file
by ikegami (Patriarch) on Mar 09, 2009 at 15:09 UTC

    What would you like to happen?

    • Drop empty records, while incrementing the id?
    • Drop empty records, without incrementing the id?
    • Insert an empty string for empty records?
      "Drop empty records, without incrementing the id" would be ideal but it really doesn't matter , because first id is a random number anyway.
        my $line; while(<LINES>){ if (m/^--/){ if (defined($line)){ my @data = ( [ $id++, $line ] ); $self->_loaddb(table => 'TABLE', data => \@data); $line = undef; } } else{ chomp; $line .= $_; } }
Re: problem with evaluating first line in a file
by kennethk (Abbot) on Mar 09, 2009 at 15:12 UTC

    The easiest solution would be the check if your string is defined prior to upload, a la:

    while(<LINES>){ if (m/^--/){ push (my @data, [$id,$line]); if (defined $line) { $self->_loaddb(table => 'TABLE', data=>\@data); } $line= undef; $id++; } else{ chomp(my $string = $_); $line.=$string; } }

    Update: Or, if you want to "Drop empty records, without incrementing the id", you could

    while(<LINES>){ if (m/^--/){ next unless defined $line; push (my @data, [$id,$line]); $self->_loaddb(table => 'TABLE', data=>\@data); $line= undef; $id++; } else{ chomp(my $string = $_); $line.=$string; } }