Супергерой
Регистрация: 30.01.2012
Адрес: address-list="Earth"
Возраст: 31
Сообщений: 2,228
Отблагодарили 654 раз(а)
|
Парсер DAT->DAT, DAT->SQL
В общем то не без помощи моего дорогого товарища METAJIJI,
был написан интересный парсер для перловки, и по ходу дела
нарабатывался мною, собственно данный парсер умеет считывать
информацию с файлов, сравнивать, и записывать данные. А именно
он был заточен на перевод DAT файлов клиента, и SQL базы даных
игровых JAVA серверов lineage 2. Для удобства в парсере есть
небольшой конфиг/выключатель, с помощью которого можно
выбрать необходимые действия которые от него требуются.
Особо много рассказывать не буду, думаю поглядев в код можно
самим все понять, ни чего сложного, если потребуется буду
выкладывать обновления скрипта
Так же с небольшим гемороем можно парсить PTS датапак в вашу SQL
Нужно лишь немного ловкости ^^
Свернуть ↑
PHP код:
#!perl -w
use strict; use DBI; use utf8; use Data::Dumper;
my $cfg = { 'translate_npcname' => 0, # 1 - перевести npcname/title (клиент/патч) 'translate_itemname' => 0, # 1 - перевести itemname (клиент/патч) 'translate_sysmsg' => 0, # 1 - перевести systemmsg (клиент/патч) 'translate_quest' => 0, # 1 - перевести quest (клиент/патч) 'translate_raid' => 0, # 1 - перевести raidinfo (клиент/патч) 'translate_skills' => 0, # 1 - перевести skillname (клиент/патч) 'translate_items' => 0, # 1 - перевести itemname в таблицах armor, etcitem, weapon (сервер/база) 'translate_fish' => 0, # 1 - перевести fish (сервер/база) 'translate_npc' => 0, # 1 - перевести npcname/title (сервер/база) 'use_lang' => q[e], # ru - itemname-ru.txt | e - itemname-e.txt 'mysql' => { 'mysql_user' => q[имя], 'mysql_pass' => q[пароль], 'mysql_db' => q[название базы], 'mysql_host' => q[хост], 'mysql_port' => q[порт], }, };
sub db_con { my $cfg = shift; my $dsn = qq[DBI:mysql:database=$cfg->{'mysql_db'};host=$cfg->{'mysql_host'};port=$cfg->{'mysql_port'};]; my $dbh = DBI->connect($dsn, $cfg->{'mysql_user'}, $cfg->{'mysql_pass'}, {PrintError => 1, RaiseError => 1}); $dbh->{mysql_auto_reconnect} = 1; $dbh->{mysql_enable_utf8} = 1; $dbh->do('SET NAMES utf8'); return $dbh; }
sub db_set { my ($dbh, $query, $data) = @_; my $res = $dbh->do($query, undef, @{$data}); return $res; }
sub db_getall_hashrefs_array { my ($dbh, $query, $data) = @_; my $sth = $dbh->prepare($query, undef); my $rv = $sth->execute(@{$data}); my $res = $sth->fetchall_arrayref({}); $res = [] unless ($res); return $res; }
sub db_getrow_hashref { my ($dbh, $query, $data) = @_; my $res = $dbh->selectrow_hashref($query, undef, @{$data}); $res = {} unless ($res); return $res; }
sub db_discon { my $dbh = shift; $dbh->disconnect(); }
# Получение заголовка файла как хеша sub get_header_as_hash { # my $hash = get_header_hash($cfg->{'file_in'}); my ($file) = @_; $file = qq[$file]; #файл для чтения open(FILE, "<$file") || die qq[Error: Can not read '$file'];
my $hash; while (<FILE>) { chomp(); # Удаляем '\n' my $line = $_; my $i = 0; while (defined($line)) { (my $a, my $b) = split ("\t", $line, 2); $line = $b; # Затираем старый массив, новым укороченным на 1 элемент. $hash->{$a} = $i; # Записываем название заголовка как ключ, а каким по счету был найден элемент заголовка как значение. $i++; } last; }
close(FILE); return $hash; }
# Получение строки, как массива sub get_line_as_array { # @line = get_line_as_array($line); my ($line, $delimiter) = @_;
$delimiter = qq[\t] if (not defined($delimiter)); my @array; while (defined($line)) { (my $a, my $b) = split ($delimiter, $line, 2); $line = $b; # Затираем старый массив, новым укороченным на 1 элемент. push(@array, $a); } return @array; }
# Запись в файл sub save_file { #&save_file($cfg->{'file_out'}, @a); my ($file, @data) = @_;
open(FILE, ">$file"); print(FILE @data); close(FILE); print qq[\t\tFile: $file\n\t\t\t successfully writed!\n]; }
if ($cfg->{'translate_items'} == 1) { my $dbh = &db_con($cfg->{'mysql'}); # подключились к БД
my $file = qq[IN\\itemname-$cfg->{'use_lang'}.txt]; # файл для чтения my $HEAD = &get_header_as_hash($file); # Получаем хеш заголовка файла open(FILE, "<$file") || die qq[Error: Can not read '$file']; my $item_id_name; while (<FILE>) { my @LINE = &get_line_as_array($_); $LINE[$HEAD->{'name'}] =~ s|\"|\\"|g; #Ищем в строке двойные кавычки и экранируем их, тобиш заменяем на подстроку вида: \" $LINE[$HEAD->{'name'}] =~ s|\'|\\'|g; #Ищем в строке одинарные кавычки и экранируем их, тобиш заменяем на подстроку вида: \' $item_id_name->{$LINE[$HEAD->{'id'}]} = $LINE[$HEAD->{'name'}];# id - название столбца с id, name название столбца с названием итема :)) КЭП } close(FILE); #закрываем файл
my @tables = ('armor', 'etcitem', 'weapon'); foreach my $table (@tables) { print qq[Working on: $table\n]; my $array = &db_getall_hashrefs_array($dbh, qq[SELECT `item_id` FROM `$table`]); map { my $id = $_->{'item_id'}; if (exists($item_id_name->{$id})) { &db_set($dbh, qq[UPDATE `$table` SET `name`="$item_id_name->{$id}" WHERE `item_id`=?], [$id]); } } @{$array}; } &db_discon($dbh);# Отключились от БД }
if ($cfg->{'translate_fish'} == 1) { my $dbh = &db_con($cfg->{'mysql'}); # подключились к БД
my $file = qq[IN\\itemname-$cfg->{'use_lang'}.txt]; # файл для чтения my $HEAD = &get_header_as_hash($file); # Получаем хеш заголовка файла open(FILE, "<$file") || die qq[Error: Can not read '$file']; my $item_id_name; while (<FILE>) { my @LINE = &get_line_as_array($_); $LINE[$HEAD->{'name'}] =~ s|\"|\\"|g; #Ищем в строке двойные кавычки и экранируем их, тобиш заменяем на подстроку вида: \" $LINE[$HEAD->{'name'}] =~ s|\'|\\'|g; #Ищем в строке одинарные кавычки и экранируем их, тобиш заменяем на подстроку вида: \' $item_id_name->{$LINE[$HEAD->{'id'}]} = $LINE[$HEAD->{'name'}];# id - название столбца с id, name название столбца с названием итема :)) КЭП } close(FILE); #закрываем файл
print qq[Working on: fish\n]; my $array = &db_getall_hashrefs_array($dbh, qq[SELECT `id` FROM `fish`]); map { my $id = $_->{'id'}; if (exists($item_id_name->{$id})) { &db_set($dbh, qq[UPDATE `fish` SET `name`="$item_id_name->{$id}" WHERE `id`=?], [$id]); } } @{$array}; &db_discon($dbh);# Отключились от БД }
if ($cfg->{'translate_npc'} == 1) { my $dbh = &db_con($cfg->{'mysql'}); # подключились к БД
my $file = qq[IN\\npcname-$cfg->{'use_lang'}.txt]; # файл для чтения my $HEAD = &get_header_as_hash($file); # Получаем хеш заголовка файла open(FILE, "<$file") || die qq[Error: Can not read '$file']; my ($npc_id_name, $npc_id_desc); while (<FILE>) { my @LINE = &get_line_as_array($_); $LINE[$HEAD->{'name'}] =~ s|\"|\\"|g; #Ищем в строке двойные кавычки и экранируем их, тобиш заменяем на подстроку вида: \" $LINE[$HEAD->{'name'}] =~ s|\'|\\'|g; #Ищем в строке одинарные кавычки и экранируем их, тобиш заменяем на подстроку вида: \' $npc_id_name->{$LINE[$HEAD->{'id'}]} = $LINE[$HEAD->{'name'}];# id - название столбца с id, name название столбца с названием итема :)) КЭП $LINE[$HEAD->{'description'}] =~ s|\"|\\"|g; #Ищем в строке двойные кавычки и экранируем их, тобиш заменяем на подстроку вида: \" $LINE[$HEAD->{'description'}] =~ s|\'|\\'|g; #Ищем в строке одинарные кавычки и экранируем их, тобиш заменяем на подстроку вида: \' $npc_id_desc->{$LINE[$HEAD->{'id'}]} = $LINE[$HEAD->{'description'}]; } close(FILE); #закрываем файл
print qq[Working on: npc\n]; my $array = &db_getall_hashrefs_array($dbh, qq[SELECT `id` FROM `npc`]); map { my $id = $_->{'id'}; if (exists($npc_id_name->{$id})) { &db_set($dbh, qq[UPDATE `npc` SET `name`="$npc_id_name->{$id}", `title`="$npc_id_desc->{$id}" WHERE `id`=?], [$id]); } } @{$array}; &db_discon($dbh);# Отключились от БД }
if ($cfg->{'translate_skills'} == 1) { my $file = qq[IN\\skillname-ru.txt]; # русский файл для чтения my $HEAD = &get_header_as_hash($file); # Получаем хеш заголовка файла open(FILE, "<$file") || die qq[Error: Can not read '$file']; my $skill_id_lvl_name; while (<FILE>) { my @LINE = &get_line_as_array($_); foreach my $n (keys %{$HEAD}) { substr($LINE[$HEAD->{$n}], 0, 3) =~ s/a,|u,//; # Удаляем в начале строки символы 'a,'|'u,' substr($LINE[$HEAD->{$n}], -3) =~ s/\\0//; # Удаляем в конце символы '\0' }
#$id => $lvl => 'name' = $_; $skill_id_lvl_name->{$LINE[$HEAD->{'skill_id'}]}->{$LINE[$HEAD->{'skill_level'}]}->{'name'} = $LINE[$HEAD->{'name'}]; $skill_id_lvl_name->{$LINE[$HEAD->{'skill_id'}]}->{$LINE[$HEAD->{'skill_level'}]}->{'desc'} = $LINE[$HEAD->{'desc'}]; $skill_id_lvl_name->{$LINE[$HEAD->{'skill_id'}]}->{$LINE[$HEAD->{'skill_level'}]}->{'enchant_name'} = $LINE[$HEAD->{'enchant_name'}]; $skill_id_lvl_name->{$LINE[$HEAD->{'skill_id'}]}->{$LINE[$HEAD->{'skill_level'}]}->{'enchant_desc'} = $LINE[$HEAD->{'enchant_desc'}]; } close(FILE); #закрываем файл
$file = qq[IN\\skillname-e.txt]; # Interlude файл для чтения $HEAD = &get_header_as_hash($file); # Получаем хеш заголовка файла my @OUT; # массив для обработанных данных и сохранения в файл open(FILE, "<$file") || die qq[Error: Can not read '$file']; while (<FILE>) { my @LINE = &get_line_as_array($_); my $id = $LINE[$HEAD->{'id'}]; # для удобства и краткости запишем id в переменную $id my $lvl = $LINE[$HEAD->{'level'}]; # для удобства и краткости запишем level в переменную $lvl if(exists($skill_id_lvl_name->{$id}->{$lvl})) { $LINE[$HEAD->{'name'}] = $skill_id_lvl_name->{$id}->{$lvl}->{'name'}; # заменяем англ имя скила на русское :) $LINE[$HEAD->{'description'}] = $skill_id_lvl_name->{$id}->{$lvl}->{'desc'}; # Заменяем англ описание скила на русское. $LINE[$HEAD->{'desc_add1'}] = $skill_id_lvl_name->{$id}->{$lvl}->{'enchant_name'}; $LINE[$HEAD->{'desc_add2'}] = $skill_id_lvl_name->{$id}->{$lvl}->{'enchant_desc'}; }
my $k = 0; # Вставляем нужное количество табуляторов foreach my $LINE (@LINE) { push(@OUT, $LINE); push(@OUT, "\t") if ($#LINE > $k); $k++; } } close(FILE); #закрываем файл
# Сохраняем в файл. &save_file(q[OUT\\skillname-e.txt], @OUT); }
if ($cfg->{'translate_raid'} == 1) { my $file = qq[IN\\raiddata-ru.txt]; # русский файл для чтения my $HEAD = &get_header_as_hash($file); # получаем хеш заголовка файла open(FILE, "<$file") || die qq[Error: Can not read '$file']; my $npc_id_raid_desc; while (<FILE>) { my @LINE = &get_line_as_array($_); foreach my $n (keys %{$HEAD}) { substr($LINE[$HEAD->{$n}], 0, 3) =~ s/a,|u,//; # удаляем в начале строки символы 'a,'|'u,' substr($LINE[$HEAD->{$n}], -3) =~ s/\\0//; # удаляем в конце символы '\0' }
#$id => 'raid_desc' = $_; $npc_id_raid_desc->{$LINE[$HEAD->{'npc_id'}]}->{'raid_desc'} = $LINE[$HEAD->{'raid_desc'}]; } close(FILE); # закрываем файл
$file = qq[IN\\raiddata-e.txt]; # английский файл для чтения $HEAD = &get_header_as_hash($file); # получаем хеш заголовка файла my @OUT; # массив для обработанных данных и сохранения в файл open(FILE, "<$file") || die qq[Error: Can not read '$file']; while (<FILE>) { my @LINE = &get_line_as_array($_); my $id = $LINE[$HEAD->{'npc_id'}]; # запишем npc_id в переменную $id if(exists($npc_id_raid_desc->{$id})) { $LINE[$HEAD->{'raid_desc'}] = $npc_id_raid_desc->{$id}->{'raid_desc'}; }
my $k = 0; # Вставляем нужное количество табуляторов foreach my $LINE (@LINE) { push(@OUT, $LINE); push(@OUT, "\t") if ($#LINE > $k); $k++; } } close(FILE); #закрываем файл
# Сохраняем в файл. &save_file(q[OUT\\raiddata-e.txt], @OUT); }
if ($cfg->{'translate_quest'} == 1) { my $file = qq[IN\\questname-ru.txt]; # русский файл для чтения my $HEAD = &get_header_as_hash($file); # получаем хеш заголовка файла open(FILE, "<$file") || die qq[Error: Can not read '$file']; my $quest_id_quest_prog_main_name; while (<FILE>) { my @LINE = &get_line_as_array($_); foreach my $n (keys %{$HEAD}) { substr($LINE[$HEAD->{$n}], 0, 3) =~ s/a,|u,//; # удаляем в начале строки символы 'a,'|'u,' substr($LINE[$HEAD->{$n}], -3) =~ s/\\0//; # удаляем в конце символы '\0' }
#$id => 'raid_desc' = $_; $quest_id_quest_prog_main_name->{$LINE[$HEAD->{'quest_id'}]}->{$LINE[$HEAD->{'quest_prog'}]}->{'main_name'} = $LINE[$HEAD->{'main_name'}]; $quest_id_quest_prog_main_name->{$LINE[$HEAD->{'quest_id'}]}->{$LINE[$HEAD->{'quest_prog'}]}->{'prog_name'} = $LINE[$HEAD->{'prog_name'}]; $quest_id_quest_prog_main_name->{$LINE[$HEAD->{'quest_id'}]}->{$LINE[$HEAD->{'quest_prog'}]}->{'description'} = $LINE[$HEAD->{'description'}]; $quest_id_quest_prog_main_name->{$LINE[$HEAD->{'quest_id'}]}->{$LINE[$HEAD->{'quest_prog'}]}->{'entity_name'} = $LINE[$HEAD->{'entity_name'}]; $quest_id_quest_prog_main_name->{$LINE[$HEAD->{'quest_id'}]}->{$LINE[$HEAD->{'quest_prog'}]}->{'restricions'} = $LINE[$HEAD->{'restricions'}]; $quest_id_quest_prog_main_name->{$LINE[$HEAD->{'quest_id'}]}->{$LINE[$HEAD->{'quest_prog'}]}->{'short_description'} = $LINE[$HEAD->{'short_description'}]; } close(FILE); # закрываем файл
$file = qq[IN\\questname-e.txt]; # английский файл для чтения $HEAD = &get_header_as_hash($file); # получаем хеш заголовка файла my @OUT; # массив для обработанных данных и сохранения в файл open(FILE, "<$file") || die qq[Error: Can not read '$file']; while (<FILE>) { my @LINE = &get_line_as_array($_); my $id = $LINE[$HEAD->{'quest_id'}]; # запишем quest_id в переменную $id my $prog = $LINE[$HEAD->{'quest_prog'}]; # запишем quest_prog в переменную $prog if(exists($quest_id_quest_prog_main_name->{$id}->{$prog})) { $LINE[$HEAD->{'main_name'}] = $quest_id_quest_prog_main_name->{$id}->{$prog}->{'main_name'}; $LINE[$HEAD->{'prog_name'}] = $quest_id_quest_prog_main_name->{$id}->{$prog}->{'prog_name'}; $LINE[$HEAD->{'description'}] = $quest_id_quest_prog_main_name->{$id}->{$prog}->{'description'}; $LINE[$HEAD->{'entity_name'}] = $quest_id_quest_prog_main_name->{$id}->{$prog}->{'entity_name'}; $LINE[$HEAD->{'restricions'}] = $quest_id_quest_prog_main_name->{$id}->{$prog}->{'restricions'}; $LINE[$HEAD->{'short_description'}] = $quest_id_quest_prog_main_name->{$id}->{$prog}->{'short_description'}; }
my $k = 0; # Вставляем нужное количество табуляторов foreach my $LINE (@LINE) { push(@OUT, $LINE); push(@OUT, "\t") if ($#LINE > $k); $k++; } } close(FILE); #закрываем файл
# Сохраняем в файл. &save_file(q[OUT\\questname-e.txt], @OUT); }
if ($cfg->{'translate_sysmsg'} == 1) { my $file = qq[IN\\systemmsg-ru.txt]; # русский файл для чтения my $HEAD = &get_header_as_hash($file); # получаем хеш заголовка файла open(FILE, "<$file") || die qq[Error: Can not read '$file']; my $id_message; while (<FILE>) { my @LINE = &get_line_as_array($_); foreach my $n (keys %{$HEAD}) { substr($LINE[$HEAD->{$n}], 0, 3) =~ s/a,|u,//; # удаляем в начале строки символы 'a,'|'u,' substr($LINE[$HEAD->{$n}], -3) =~ s/\\0//; # удаляем в конце символы '\0' }
#$id => 'raid_desc' = $_; $id_message->{$LINE[$HEAD->{'id'}]}->{'message'} = $LINE[$HEAD->{'message'}]; $id_message->{$LINE[$HEAD->{'id'}]}->{'sub_msg'} = $LINE[$HEAD->{'sub_msg'}]; } close(FILE); # закрываем файл
$file = qq[IN\\systemmsg-e.txt]; # английский файл для чтения $HEAD = &get_header_as_hash($file); # получаем хеш заголовка файла my @OUT; # массив для обработанных данных и сохранения в файл open(FILE, "<$file") || die qq[Error: Can not read '$file']; while (<FILE>) { my @LINE = &get_line_as_array($_); my $id = $LINE[$HEAD->{'id'}]; # запишем npc_id в переменную $id if(exists($id_message->{$id})) { $LINE[$HEAD->{'message'}] = $id_message->{$id}->{'message'}; $LINE[$HEAD->{'sub_msg'}] = $id_message->{$id}->{'sub_msg'}; }
my $k = 0; # Вставляем нужное количество табуляторов foreach my $LINE (@LINE) { push(@OUT, $LINE); push(@OUT, "\t") if ($#LINE > $k); $k++; } } close(FILE); #закрываем файл
# Сохраняем в файл. &save_file(q[OUT\\systemmsg-e.txt], @OUT); }
if ($cfg->{'translate_itemname'} == 1) { my $file = qq[IN\\itemname-ru.txt]; # русский файл для чтения my $HEAD = &get_header_as_hash($file); # получаем хеш заголовка файла open(FILE, "<$file") || die qq[Error: Can not read '$file']; my $id_name; while (<FILE>) { my @LINE = &get_line_as_array($_); foreach my $n (keys %{$HEAD}) { substr($LINE[$HEAD->{$n}], 0, 3) =~ s/a,|u,//; # удаляем в начале строки символы 'a,'|'u,' substr($LINE[$HEAD->{$n}], -3) =~ s/\\0//; # удаляем в конце символы '\0' }
#$id => 'raid_desc' = $_; $id_name->{$LINE[$HEAD->{'id'}]}->{'name'} = $LINE[$HEAD->{'name'}]; $id_name->{$LINE[$HEAD->{'id'}]}->{'add_name'} = $LINE[$HEAD->{'add_name'}]; $id_name->{$LINE[$HEAD->{'id'}]}->{'description'} = $LINE[$HEAD->{'description'}]; $id_name->{$LINE[$HEAD->{'id'}]}->{'set_bonus_desc'} = $LINE[$HEAD->{'set_bonus_desc'}]; $id_name->{$LINE[$HEAD->{'id'}]}->{'set_extra_desc'} = $LINE[$HEAD->{'set_extra_desc'}]; $id_name->{$LINE[$HEAD->{'id'}]}->{'special_enchant_desc'} = $LINE[$HEAD->{'special_enchant_desc'}]; } close(FILE); # закрываем файл
$file = qq[IN\\itemname-e.txt]; # английский файл для чтения $HEAD = &get_header_as_hash($file); # получаем хеш заголовка файла my @OUT; # массив для обработанных данных и сохранения в файл open(FILE, "<$file") || die qq[Error: Can not read '$file']; while (<FILE>) { my @LINE = &get_line_as_array($_); my $item_id = $LINE[$HEAD->{'id'}]; # запишем npc_id в переменную $id if(exists($id_name->{$item_id})) { $LINE[$HEAD->{'name'}] = $id_name->{$item_id}->{'name'}; $LINE[$HEAD->{'add_name'}] = $id_name->{$item_id}->{'add_name'}; $LINE[$HEAD->{'description'}] = $id_name->{$item_id}->{'description'}; $LINE[$HEAD->{'set_bonus_desc'}] = $id_name->{$item_id}->{'set_bonus_desc'}; $LINE[$HEAD->{'set_extra_desc'}] = $id_name->{$item_id}->{'set_extra_desc'}; $LINE[$HEAD->{'special_enchant_desc'}] = $id_name->{$item_id}->{'special_enchant_desc'}; }
my $k = 0; # Вставляем нужное количество табуляторов foreach my $LINE (@LINE) { push(@OUT, $LINE); push(@OUT, "\t") if ($#LINE > $k); $k++; } } close(FILE); #закрываем файл
# Сохраняем в файл. &save_file(q[OUT\\itemname-e.txt], @OUT); }
if ($cfg->{'translate_npcname'} == 1) { my $file = qq[IN\\npcname-ru.txt]; # русский файл для чтения my $HEAD = &get_header_as_hash($file); # получаем хеш заголовка файла open(FILE, "<$file") || die qq[Error: Can not read '$file']; my $npc_id_name_desc; while (<FILE>) { my @LINE = &get_line_as_array($_); foreach my $n (keys %{$HEAD}) { substr($LINE[$HEAD->{$n}], 0, 3) =~ s/a,|u,//; # удаляем в начале строки символы 'a,'|'u,' substr($LINE[$HEAD->{$n}], -3) =~ s/\\0//; # удаляем в конце символы '\0' }
#$id => 'raid_desc' = $_; $npc_id_name_desc->{$LINE[$HEAD->{'npc_id'}]}->{'name'} = $LINE[$HEAD->{'name'}]; $npc_id_name_desc->{$LINE[$HEAD->{'npc_id'}]}->{'description'} = $LINE[$HEAD->{'description'}]; } close(FILE); # закрываем файл
$file = qq[IN\\npcname-e.txt]; # английский файл для чтения $HEAD = &get_header_as_hash($file); # получаем хеш заголовка файла my @OUT; # массив для обработанных данных и сохранения в файл open(FILE, "<$file") || die qq[Error: Can not read '$file']; while (<FILE>) { my @LINE = &get_line_as_array($_); my $npc_id = $LINE[$HEAD->{'id'}]; # запишем npc_id в переменную $id if(exists($npc_id_name_desc->{$npc_id})) { $LINE[$HEAD->{'name'}] = $npc_id_name_desc->{$npc_id}->{'name'}; $LINE[$HEAD->{'description'}] = $npc_id_name_desc->{$npc_id}->{'description'}; }
my $k = 0; # Вставляем нужное количество табуляторов foreach my $LINE (@LINE) { push(@OUT, $LINE); push(@OUT, "\t") if ($#LINE > $k); $k++; } } close(FILE); #закрываем файл
# Сохраняем в файл. &save_file(q[OUT\\npcname-e.txt], @OUT); }
=BEGIN
=cut
Свернуть ↑Развернуть ↓
Последний раз редактировалось MrShyr; 28.02.2013 в 23:17.
|