обновить столбец во входном файле, взяв значение из базы данных в perl - PullRequest
0 голосов
/ 07 января 2011

входной файл:

1,a,USA,,
2,b,UK,,
3,c,USA,,

Я хочу обновить четвертый столбец во входном файле, взяв значения из одной таблицы.

мой код выглядит так:

my $number_dbh = DBI->connect("DBI:Oracle:$INST", $USER, $PASS ) or die "Couldn't
connect to datbase $INST";
my $num_smh;
print "connected \n ";
open FILE , "+>>$input_file" or die "can't open the input file";
print "echo \n";
while(my $line=<FILE>)
{
   my @line_a=split(/\,/,$line);
   $num_smh = $number_dbh->prepare("SELECT phone_no from book where number = $line_a[0]");
   $num_smh->execute() or die "Couldn't execute stmt, error : $DBI::errstr";
   my $number = $num_smh->fetchrow_array();
   $line_a[3]=$number;
}

Ответы [ 2 ]

1 голос
/ 07 января 2011

Похоже, ваши данные в формате CSV. Вы можете использовать Parse :: CSV .

0 голосов
/ 08 января 2011

+>> не делает то, что вы думаете, что делает.На самом деле, в тестировании, похоже, ничего не происходит.Кроме того, +< делает что-то очень странное:

 % cat file.txt
1,a,USA,,
2,b,UK,,
3,c,USA,,
 % cat update.pl
#!perl

use strict;
use warnings;

open my $fh, '+<', 'file.txt' or die "$!";
while ( my $line = <$fh> ) {
    $line .= "hello\n";
    print $fh $line;
}
 % perl update.pl
 % cat file.txt
1,a,USA,,
1,a,USA,,
hello
,,
,,
hello
 %

+>, кажется, усекает файл.

На самом деле, вы хотите записать в новый файл, затемскопируйте этот файл поверх старого.Открытие файла для одновременного чтения / записи выглядит так, как будто вы попадаете в мир боли.

В качестве отступления следует использовать форму с тремя аргументами open() (безопаснее для "странных" имен файлов)и используйте лексические файловые дескрипторы (они не являются глобальными, и когда они выходят за пределы вашей области, ваш файл автоматически закрывается для вас).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...