Файлы и массивы

Vadik(R)

Well-known member
12.12.2007
469
0
#1
Люди, гляньте вложение. Посмотреть вложение hangman.rar
В проге yes задается массив и выводится количество элементов в нем, и печатаеться сам массив двумя способами. В проге no я пытался считать этот список из файла, но вот две проблемы:
1. Почему перед словом Internet стоит какой-то квадратик и как от него избавиться?
2. Почему в проге yes первый вывод(print @words;) выводил массив в одну строчку, а впроге no - в 4 строчки?
P.S. Пробовал после считывания массива поэксперементировать с chomp;, но тогда при выводе массива вообще начинало писаться одно слово: printerma (я как понял сложение и замещение:
internet+
otvet+
programma+
printer=
-----------------
printerma
).
 

Вложения

Vadik(R)

Well-known member
12.12.2007
469
0
#2
А, я кажеться всё понял... тут Perl не виноват, тут скорее виноват тот, кто не умеет им пользоваться.
Видимо я когда-то открыл файл неправильно и перл переделал его в свой формат... и теперь он открывается снова неправильно. А если создать новый файл и вбить туда те же самые слова, то все работает прекрасно. Даже видно что новый файл будет весит 35 б, а hangman.txt - 72 б.
 
V

Vovochka

#3
<!--QuoteBegin-Vadik®+12:02:2008, 00:47 -->
<span class="vbquote">(Vadik® @ 12:02:2008, 00:47 )</span><!--QuoteEBegin-->1. Почему перед словом Internet стоит какой-то квадратик и как от него избавиться?
[snapback]97563" rel="nofollow" target="_blank[/snapback]​
[/quote]
Скорее всего файл был сохранен в кодировке utf8 с BOM подписью.
<!--QuoteBegin-Vadik®+12:02:2008, 00:47 -->
<span class="vbquote">(Vadik® @ 12:02:2008, 00:47 )</span><!--QuoteEBegin-->2. Почему в проге yes первый вывод(print @words;) выводил массив в одну строчку, а впроге no - в 4 строчки?
[snapback]97563" rel="nofollow" target="_blank[/snapback]​
[/quote]
Да. Именно потому что каждое слово после считывания из файла содержит еще символ перевода строки.
<!--QuoteBegin-Vadik®+12:02:2008, 00:47 -->
<span class="vbquote">(Vadik® @ 12:02:2008, 00:47 )</span><!--QuoteEBegin-->P.S. Пробовал после считывания массива поэксперементировать с chomp;, но тогда при выводе массива вообще начинало писаться одно слово: printerma
[snapback]97563" rel="nofollow" target="_blank[/snapback]​
[/quote]
Ничего не понял. Как это надо было извратиться? Если вам мало примера из perlfunc,
то вот удаление перевода строки для вашего массива:
Код:
@words = map { chomp; $_ } @words;
 

Vadik(R)

Well-known member
12.12.2007
469
0
#4
Да ничего, всё, я уже сам разобрался. А вот извратиться так всё-таки как-то получилось. Вся проблема была в формате файла. Я поначалу его создал, и первый раз видимо неправильно открыл Perl'ом, из-за этого в блокноте файл всё равно отображался как надо, но структура была уже подпорчена.