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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение и запись в файл 
:(
    Опции темы
noder
Дата 19.8.2004, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ, подскажите как осуществить чтение все текста из одного файла, запись этого текста в переменную и запись этой переменной в другой файл (или несколько файлов).
Я потихоньку разбираюсь с ПЕРЛом, примерно что то похожее уже сделал, только почему то когда я записываю в файл переменную, записывается только последняя строка текста. Покажите элементарный пример как это правильно делается, а то срочно, по работе надо... Спасибо.
PM MAIL   Вверх
Secandr
Дата 19.8.2004, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



всё просто
открыть на чтение:
Код
open FH, "<file.name";


на запись:
Код
open FH, ">file.name";


читать:
Код
print <FH>;


писать:

Код
print FH "cool";


А вообще-то всё это есть в манулах!


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
chaos
Дата 19.8.2004, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



Код
open (F1,"<file_for_read");
open (F2,">file_for_write");
while ($str = <F1>) {
 print F2 $str;
}
close(F1);
close(F2);

Вот один из вариантов копирования одного файла в другой
PM WWW   Вверх
GoodBoy
Дата 19.8.2004, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



noder
Смотри, если ты читаешь так:
Код
while ($str = <F1>) {
   что-то делаем
}
то ты читаешь файл по одной строке. Если же ты хочешь прочиталь весь файл сразу, то читай его вот так:
Код
@strings = <F1>;
тогда в массиве @strings окажутся все строки файла.

Если тебе надо ВЕСЬ этот файл записать в другой, то можно вот так:
Код
print F2 join("", @strings);
здесь все строки из массива @strings объединяются в одну строку и записываются в файл.


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
achmed
Дата 19.8.2004, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



вот способ прочитать весь файл в одну переменную (а не массив)
$oldsep = $/;
$/=undef;
$data = <F>;
$/ = $oldsep;

поясняю: переменная $/ это разделитеь при при чтении операторм <>, если его сделать undef,
то чтение будет производится пока не кончатся данные в потоке.

см. perldoc perlvar

PM MAIL   Вверх
y0sh1
Дата 30.8.2004, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вопрос:
есть скрипт опрашивающий директории и записывающий это в файл... работает около 2 часов... надо бы сделать так, что бы в течении этого времени файл можно было смотреть на предмет уже записанных туда результатов, а то делаю это стандартным open(в начале скрипта) print(в цикле) close(в конце) - в результате в файле что-то появляется только когда скрипт полностью отработает и и закроет его... конечно можно прям в теле цикла открывать его дозаписывать и закрывать, но может есть более оптимальные варианты!? заранее спасибо за ответ...
PM MAIL   Вверх
ElectricalStorm
Дата 30.8.2004, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



$|++;


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
y0sh1
Дата 30.8.2004, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ElectricalStorm
Цитата
$|++;

прости... я не так давно за Перлом - что я должен увидеть или в чём смысл!? принтом вывести её на стдаут!?
PM MAIL   Вверх
ElectricalStorm
Дата 30.8.2004, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

- в результате в файле что-то появляется только когда скрипт полностью отработает и и закроет его..


вот что бы вывод не буферизировать тоесть что бы сразу появлялось smile.gif

сбрасываешь буферизацию

Код

$|++;

# это просто другое написание $| = 1; :)








--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
y0sh1
Дата 30.8.2004, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



аааа.... это надо после функции write вставить!? попробовал, что-то не идёт... sad.gif
Код
chdir($dir_name);
opendir(D,$dir_name);
while($s_root=readdir(D)) {
if (-d "$s_root") {
 dir_ls ($s_root); #вызываем рекурсию...
 write();               # вот тут происходит запись в файл в цикле
 write(FF);
 $|++;                   # типа пытаюсь сбросить кэш
 }
}


Пускаю скрипт, жду пока пойдёт несколько циклов - смотрю в лог - ничего.... появляется что-то только после того как весь скрипт отработает и файл будет close! В чём ошибка!? sad.gif

Это сообщение отредактировал(а) y0sh1 - 30.8.2004, 17:29
PM MAIL   Вверх
ElectricalStorm
Дата 30.8.2004, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



use strict;

$| = 1;

Далее Ваш код




Это сообщение отредактировал(а) ElectricalStorm - 30.8.2004, 17:30


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
y0sh1
Дата 30.8.2004, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не идёт... sad.gif а без use strict; работать будет!? А то у меня его нет, тк с ним ошибку на format выдаёт...!?
PM MAIL   Вверх
ElectricalStorm
Дата 30.8.2004, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



будет работать и без use strict;

весь код запостите


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
y0sh1
Дата 30.8.2004, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код
$| = 1;
# объвл переменных....

sub dir_ls {
       my $save_dir;
       my $root = shift;
       local *DIR_LS;
       opendir DIR_LS ,$root;
       while (my $file = readdir (DIR_LS) ) {
  next if $file =~ /^\.\.?$/;
  next if $root =~ /^\.\.?$/;
           if (-d "$root/$file") {
              dir_ls ("$root/$file");
              }
    # вычисляем объём файлов в каталогах....
       }
}

open (FF, ">> e:\\perl\\log.txt") or die "Oups: $!";
$dir_name="e:\\distr";
chdir($dir_name);
opendir(D,$dir_name);
while($s_root=readdir(D)) {
next if $s_root eq ".";
next if $s_root eq "..";
if (-d "$s_root") {
 dir_ls ($s_root);
 write();
 write(FF);
 $|++;
 }
}
closedir(D);
write();
write(FF);
close (FF);

# далее объявление форматов в которых в лог выводиться расч переменные...

PM MAIL   Вверх
ElectricalStorm
Дата 30.8.2004, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



$|++ вот это из кода уберите



--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
y0sh1
Дата 31.8.2004, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ElectricalStorm
Цитата
$|++ вот это из кода уберите

вы же сами его сказала написать!!!???
PM MAIL   Вверх
Guest
Дата 31.8.2004, 09:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











понимаете $| - это флаг состояния буферизации вывода
так вот если он установлен в 0 (по умолчанию) значит идет буферизированный вывод а если в 1 то нет

$| = 1; или(!) не и $|++; все флаг установлен


за чем его еще увеличивать ... думайтье о нем как о булеан


  Вверх
ElectricalStorm
Дата 31.8.2004, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



это я был smile.gif


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
y0sh1
Дата 31.8.2004, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну включил небуферизированный вывод - не помогло. sad.gif
Наверно я что-то туплю. (G)
PM MAIL   Вверх
ElectricalStorm
Дата 31.8.2004, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



весь код встудию весь весь .. .


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
y0sh1
Дата 31.8.2004, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



отправил на почту, что бы не засорять топ...
PM MAIL   Вверх
ElectricalStorm
Дата 1.9.2004, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ok ща посморю
Добавлено @ 13:20
на до перед open убрать $| = 1;

и поставить в начале скрипта $| = 1; и все заработает






--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
y0sh1
Дата 1.9.2004, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



почему!? какая разница где отключать буферизацию!? Перед объявлением переменных и подпрограмм или перед началом основного кода!?
Переставил - не идёт... sad.gif
PM MAIL   Вверх
ElectricalStorm
Дата 1.9.2004, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



так давай те выяснять что имменно не идет может мы про разные вещи говорим ?


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


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

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


 




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


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

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