Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись хэша в файл, после определенных манипуляций 
:(
    Опции темы
dya
Дата 20.10.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 27.6.2007

Репутация: 1
Всего: 1



Есть файл с записями.
Код
test1:09:98:68
test2:97:68:23
После манипуляции с файлом я получаю хеш, вида.
Код

%h = (
    'test1' => [ 09, 98, 68 ],
    'test2' => [ 97, 68, 23 ],
);
Теперь я изменяю значение $h{ 'test2' }[1] на 21.
Мне необходима произвести изменения(запись) в файле.
Код
test1:09:98:68
test2:97:21:23
Как это сделать и возможно ли пример, без использование модулей.

Вариант как переписать полностью строку в файле отпадает.

Переоценил свои возможности. Думаю еще нужна помощь в создание хэша, который приведён сверху.

Это сообщение отредактировал(а) dya - 20.10.2007, 19:58
PM MAIL   Вверх
KSURi
Дата 20.10.2007, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



perldoc SDBM_File

Создание хэша:
Код

open(IN, 't.txt') || die $!;

my %hash;
chomp, $hash{(split':')[0]} = [(split':')[1..3]] while <IN>;

close IN;


Это сообщение отредактировал(а) KSURi - 21.10.2007, 07:19


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
nitr
Дата 20.10.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



dya, вы опишите "правильно" свой вопрос! Тогда помогут, тем более что "по-простому" задача проста и "на чтение" и "на запись".


--------------------
PM   Вверх
dya
Дата 20.10.2007, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 27.6.2007

Репутация: 1
Всего: 1



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

ну хз как еще вроде показать, сверху же примером.

Это сообщение отредактировал(а) dya - 20.10.2007, 22:04
PM MAIL   Вверх
nitr
Дата 21.10.2007, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



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

вот одно из них (воспользуюсь примером KSURi ;) ):

script.pl
Код

#!/usr/bin/perl
use strict;
use warnings;

use Tie::File;

my @data;
tie @data, "Tie::File", '178100.txt' or die "$!\n";

my %h = map {(split /:/,$_)[0] => [(split /:/,$_)[1..3]]} @data;

$h{'test2'}[1] = '21';

@data = map { "$_:".join(':',@{$h{$_}}) } keys %h;


178100.txt
Код

test1:09:98:68
test2:97:68:23


Добавлено через 2 минуты и 4 секунды

а вот с модулями (с установками) *DB*_File вы замучиетесь.


--------------------
PM   Вверх
dya
Дата 21.10.2007, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 27.6.2007

Репутация: 1
Всего: 1



Спс, есть еще варианты? Буду признателен.
PM MAIL   Вверх
korob2001
Дата 21.10.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Ну раз уж мы юзаем хеш, то может подумать над тем, что бы использовать DBM файл??? Тогда и память твоя будет свободна, так как при работе с DBM хеш связывается с файлом, а не читает его в память.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
nitr
Дата 21.10.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



dya, как сказали "ВСЕ": или "ресурсы" или заюзать модули *DB*_File


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0724 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.