|
|
|
| Ответ 007 на задачу N 7.
С условиями задачи можно ознакомится по ссылке.
Предположим, имя файла - "file.txt".
Тогда
mixture.php:
<?php
//Получаем массив из строк файла
$arr = file('file.txt');
//Подключаем генератор
mt_srand(time()*100000);
//Перемешиваем
shuffle($arr);
//Переводим в строку для удобства записи
$for_write = '';
foreach($arr as $row) {
$for_write = $for_write.$row;
}
//Записываем
$open = fopen('file.txt', 'w');
fwrite($open, $for_write);
fclose($open);
?>
|
ordernum.php:
<?php
//Получаем массив из строк файла
$arr = file('file.txt');
//Перегоняем в массив вида число => название языка
foreach($arr as $row) {
list($num, $lang) = explode(" ", $row);
$new_arr[$num] = $lang;
}
//Сортируем по ключам
ksort($new_arr);
//Преобразуем в строку для удобства записи
$for_write = '';
foreach($new_arr as $key => $value) {
$for_write = $for_write.$key." ".$value;
}
//Записываем
$open = fopen('file.txt', 'w');
fwrite($open, $for_write);
fclose($open);
?>
|
http://www.softtime.ru/info/task.php?id_article=77 | |
|
|
|
|
|
|
|
для: SoftTime
(18.02.2006 в 07:51)
| | Всё компактно... После использования mixture.php получил следующее
9 Fortran
3 JavaScript
2 PHP
10 Assembler7 C++
8 Pascal
5 Java
6 Perl
4 ASP.NET
1 Fort
|
Это связано с тем, что в моём файле последняя запись не завершалась переводом строки, скрипт это не учитывает.
После сортировки получил файл
1 Fort2 PHP3 JavaScript4 ASP.NET5 Java6 Perl7 C++8 Pascal9 Fortran10 Assembler
|
Т.е. переводов строк нет и повторно скрипт нельзя использовать - это серьёзный недочёт, так как изменяется структура файла.
Кроме того, скриптов должно было быть три штуки, не хватает сортировки по алфавиту. | |
|
|
|
|
|
|
|
для: cheops
(20.02.2006 в 00:37)
| | У меня почему-то результат другой. Остался пробел в первом результате:
3 JavaScript
7 C++
2 PHP
1 Fort
4 ASP.NET
9 Fortran
6 Perl
10 Assembler
5 Java
8 Pascal
|
и все пробелы во втором:
1 Fort
2 PHP
3 JavaScript
4 ASP.NET
5 Java
6 Perl
7 C++
8 Pascal
9 Fortran
10 Assembler
|
Не подскажете, в чем может быть дело?
Инетересно еще, что когда добавлял знак перехода строки в oredernum.php, с этими пробелами возникала полная путаница. В блокноте, во вском случае. Причем и в варианте с *-никсовским переводом и с \r\n. Для меня так и осталось необъяснимым, почему, - и почему он у меня работает так. То есть откуда, собственно, переводы строк берутся в ordernum.php? | |
|
|
|
|
|
|
|
для: ck
(20.02.2006 в 05:12)
| | Проблема в том, что переводы строк могут как быть оставлены функциями, так и удалены, на всякий случай их следует удалять при помощи функции trim() и вставлять свои - это полностью решит проблему. | |
|
|
|
|
|
|
|
для: SoftTime
(18.02.2006 в 07:51)
| | ordernum.php:
foreach($new_arr as $key => $value) {
$for_write = $for_write.$key." ".$value;
}
|
по моему при первом проходе номером строки будет ноль?
а в примере нет нуля там строки умеруются с единицы
и нет разделителя строк | |
|
|
|