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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема "склеивания" строки из фаила и из STDIN 
V
    Опции темы
StargazerV
Дата 3.4.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если коротко, то я пытаюсь прочесть строку из файла, получить к ней дополнение от пользователя из STDIN и обьеденив их вместе, куда-то положить. Куда-то, котопу, что это не важно, куда. Проблема именно с объединением.

Код


open(PROGFILE, $progFile) or die $!;

while($row = <PROGFILE>)
{
    chomp($row);
    
    print("\n$row\n");
    print("Enter row documentation:\n");
    
    chomp($tempInput = <STDIN>);
    
    print($row.$tempInput) ;
}

close(PROGFILE);



в результыте подобного кода, получаю к примеру следующие результаты:

строка из открытого файла
Enter row documentation:
документация

документацияытого файла

т.е. при объединении данные как бы накладываются один на другой, вместо объединения.

Есть мысли?
PM MAIL   Вверх
shamber
Дата 3.4.2010, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Начните с простого
Код

use strict;

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


Новичок



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

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



уже есть.

я не уточнил, та часть, которую я выложил, это только проблематичная часть, т.е. не весь код. Есть и use strict; и всякое разное.

Добавлено через 50 секунд
На всякий случай, вот ВЕСЬ код

Код

#!/usr/local/bin/perl 

use warnings;
use strict;
use diagnostics;

#varibles declaration
my $numArgum;
my $progFile;
my @documentedFile;
my $tempInput;
my $row;

#checking number of arguments received
$numArgum = @ARGV;

if($numArgum == 0)
{
    print("\nPlease enter your program file name for description:\n");
    
    chomp($progFile = <STDIN>);
}
elsif($numArgum > 1)
{
    print("\nToo many agruments.\n");
    print("usage: my_prog.pl <file_name>\n");
    exit(1);
}
else
{
    $progFile = $ARGV[0];
}

open(PROGFILE, $progFile) or die $!;

while($row = <PROGFILE>)
{
    chomp($row);
    
    print("\n$row\n");
    print("Enter row documentation:\n");
    
    chomp($tempInput = <STDIN>);
    
    print($row.$tempInput) ;
}

close(PROGFILE);

exit(0);

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


Эксперт
***


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

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



StargazerV, описанных вами проблем не испытываю. У меня все печатается как и ожидается.
test.txt
Код

<?xml version="1.0" encoding="windows-1251"?>
<!-- Generated by Oracle Reports version 6.0.8.14.2 -->
<message class="80020" version="2" number="2080">

test.pl
Код

my $progFile = 'test.txt';
open(PROGFILE, $progFile) or die $!;

while($row = <PROGFILE>)
{
    chomp($row);
    print("\n$row\n");
    print("Enter row documentation:\n");
    chomp($tempInput = <STDIN>);
    print($row.$tempInput) ;
}
close(PROGFILE);


Код

<?xml version="1.0" encoding="windows-1251"?>
Enter row documentation:
3
<?xml version="1.0" encoding="windows-1251"?>3
<!-- Generated by Oracle Reports version 6.0.8.14.2 -->
Enter row documentation:
5
<!-- Generated by Oracle Reports version 6.0.8.14.2 -->5
<message class="80020" version="2" number="2080">


Это сообщение отредактировал(а) shamber - 3.4.2010, 19:33
PM MAIL Jabber   Вверх
StargazerV
Дата 3.4.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



мде.... а это уже совсем грустно.

возможно проблема в интерпритаторе перла?

изначально пишу все под линукс. Запускаю через cygwin, в котором установлен perl.
Если кто не в курсе, cygwin создает под windows оболочку линуска.

Но я попробую сейчас запустить скрипт на прямую в линуксе, возможно прблема в cygwin, хотя сомнительно.
PM MAIL   Вверх
shamber
Дата 3.4.2010, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(StargazerV @  3.4.2010,  19:38 Найти цитируемый пост)
изначально пишу все под линукс. Запускаю через cygwin, в котором установлен perl.
Если кто не в курсе, cygwin создает под windows оболочку линуска.

Но я попробую сейчас запустить скрипт на прямую в линуксе, возможно прблема в cygwin, хотя сомнительно. 


ЩИТО?

PM MAIL Jabber   Вверх
StargazerV
Дата 3.4.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да в принципе ничего. Корочи проблема в том, что запускается все это под линуксом (так надо). И под линуксом испытывается вышеуказанная проблема. в Win не пробовал, но и не надо.
PM MAIL   Вверх
shamber
Дата 3.4.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



StargazerV, а нормальный Linux не пробовали запускать?
PM MAIL Jabber   Вверх
StargazerV
Дата 3.4.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



пробовали, пробовали. Результат тот же.
PM MAIL   Вверх
shamber
Дата 3.4.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



StargazerV, Я тоже пробовал smile только что. Результат плачевный.

PM MAIL Jabber   Вверх
StargazerV
Дата 3.4.2010, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мде... т.е. проблема в том, как линукс обрабатывает перл, а не в коде. Странно. Возможно, нужно что-то где-то добавить в коде... хз, как это решить.
PM MAIL   Вверх
Logo
Дата 4.4.2010, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня нормальный вывод. Ubuntu 9.10.
Проверь, не закрался ли символ возврата каретки \r в строки. Скорее всего в файле виндовый перевод строки \r\n и символ \r остается.

[offtop]
Правильно
Код

while(defined($row = <PROGFILE>))

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


Шустрый
*


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

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



Цитата(StargazerV @  3.4.2010,  19:06 Найти цитируемый пост)
Мде... т.е. проблема в том, как линукс обрабатывает перл, а не в коде. Странно. Возможно, нужно что-то где-то добавить в коде... хз, как это решить.

какая дикость, как язык поворачивается так сказать ))), помимо того что это просто не грамотно, еще так грешить на линукс )), который здесь совершенно не причем.

к гадалке не ходи это проблема в \r и в том что chomp убирает только \n
решалась бы банально
$/ = "\r\n";

если бы вы при это еще из stdin ничего не читали но при вашем варианте у вас получается ввод файлов в двух разных стандартах окончания строки, перл к такому слабо приспособлен.
посему простой регэксп избавит от проблем.

while($row = <PROGFILE>)
{
    chomp($row);
    $row =~ s/\r//;



кстати если бы вы выводили данные в файл а не на терминал результат был бы иным, попробуйте. ) 
PM MAIL   Вверх
StargazerV
Дата 5.4.2010, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, с \r я бы сам не дошел.

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


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

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


 




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


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

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