Вы не вошли.


Господа, есть заморочка. Есть txt файл. Пусть будет в 50 строк
1 дерево
2 дорога
...
50 корова
нужно разбить его на 5 равных частей при этом не пользуясь мышкой и клавиатурой.
на выходе должно быть 5 файлов:
text1 text2 .. text5
в каждом по 10 строк.
Решение в гугле нашел, но может кто не гугля предложит интересный вариант.
Вне форума


Сказать честно? Янихуянепонял.пнг
1) Какое это имеет отношение к программированию?
2) Что, если количество строк не делится нацело на 5?
nolinux.w2c.ru - море баттхерта и деаонимизации
Вне форума


при этом не пользуясь мышкой и клавиатурой.
Силой мысли штоле? Или геймпадом? По таймеру? Как компьютер поймёт, какие файлы нужно делить и когда? 
Считывай строки, дели количество строк на 5, записывай нужные строки в нужные файлы. Или чего?
Вне форума


нужно разбить его на 5 равных частей при этом не пользуясь мышкой и клавиатурой.
split -l10 -a1 -d text text.:``́3̶E̶P̶O̶W̶h̶`́`:.
Вне форума


Руби всегда придет на помощь.
Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю. (с) Рехтур. Взламывает анусы по ойпи.
Вне форума


split -l10 -a1 -d text text
А ты это носом вводить будешь через астрал??? Тебе же, блять, по-русски написали, мышей и клавой не пользоваться!!! 
Господа, вы охуели. Все. ©Cэмен
Вне форума


частей при этом не пользуясь мышкой и клавиатурой.
А чем пользуясь-то? силой мысли?
Анархия-мама сынов своих любит
Вне форума


А ты это носом вводить будешь через астрал???
Я думаю, код на похапэруби через астрал тоже не вводится. Почему вы пристали именно ко мне? Какие-то проблемы? 
Отредактировано Linups_Troolvalds (05-06-11 23:24:28)
.:``́3̶E̶P̶O̶W̶h̶`́`:.
Вне форума
<?php
$file = file("./file1.txt");
$count1 = ceil(count($file)/5);
$file = array_chunk($file,$count1);
foreach($file as $array){
$array[$count1-1] = str_replace("\r\n","",$array[$count1-1]);
$string = implode("",$array);
$file2 = fopen("text".++$numfiles, "w");fwrite($file2,$string);fclose($file2);
}
?>А я придумал, как. Нужно просто воспользоваться планшетником с рукописным вводом. Стилус - это не мышка.
Вне форума


Я требую реализации управления голосом! Чего в микрофон крикнуть, чтобы файлы поделились?
Вне форума


str_replace("\r\n","",$array[$count1-1]);
fopen("text".++$numfiles, "w");fwrite($file2,$string);fclose($file2);
Какое убожище, не дай сОтОна на таком программировать.
Я думаю, код на похапэруби через астрал тоже не вводится. Почему вы пристали именно ко мне? Какие-то проблемы? roll
Нет, просто Паша знает что руби -- божественен, на руби следует молиться, логотип руби следует распечатать и он должен висеть в рамочке, по 8 штук в каждой комнате, руби излечивает рак php головного мозга.
Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю. (с) Рехтур. Взламывает анусы по ойпи.
Вне форума
Разгоняежсо и ебошишь головой монитор. Текст будет разбит вместе с ним 
Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©
Вне форума


Разгоняежсо и ебошишь головой монитор. Текст будет разбит вместе с ним
+1, только прицелиться хорошо надо, что бы по 5 разбить... 
Почему вы пристали именно ко мне? Какие-то проблемы?
Наличие в мире таких как ты и есть главная проблема 
Господа, вы охуели. Все. ©Cэмен
Вне форума


Силой мысли штоле?
нет, имелось ввиду не топорное решение. Выделил 10 строк, скопировал, создал файл вставил.
Добавлено спустя 50 мин 17 с:
Если никто не возражает я удалю все сообщения не по теме. Тут разговор исключительно о написании алгоритмов и других красивых решениях. Буду дома попробую запаковать раром без сжатия, но с разбитием на тома, потом это дело попробую распаковать. Иересно что получится
Вне форума


Наличие в мире таких как ты и есть главная проблема
Очень интересно. Было бы, будь я психатром. В любом случае, решить эту вашу личную проблему вы не в силах, так что лучше смириться и забить.
И заметьте, я понял топикстартера совершенно верно, в отличие от вас, решение очень простое и работает.
Отредактировано Linups_Troolvalds (06-06-11 13:07:38)
.:``́3̶E̶P̶O̶W̶h̶`́`:.
Вне форума


Linups_Troolvalds, в вашем решении нужно вручную вычислить количество строк в файле и поделить его на пять, да?
Если надо поделить на пять, тоже ничего особо сочинять не надо, можно так:
expr `wc -l text|sed 's/\x20.*//'` / 5И остаток от деления, если у нас вдруг не делится на пять, то же самое, только не «/», а «%».
.:``́3̶E̶P̶O̶W̶h̶`́`:.
Вне форума


Буду дома попробую запаковать раром без сжатия, но с разбитием на тома, потом это дело попробую распаковать. Иересно что получится
Не взлетит.
Во-первых, у тебя получится, всё-таки, не совсем текстовики - в начале и в конце файлов добавится всякая лабуда.
Во-вторых, что важнее, разбиение на части будет по объёму, а не по строкам, т.е. может сработать только если у тебя в строках одинаковое количество букв (учитывая добавленные символы - не совсем одинаковое, но всё-таки строго определённое).
Вне форума


А как это будет выглядеть одной командой?
Страшно.
Например, так:
n=0;l=$(wc -l text);l=${l/text};[ $((l%5)) == 0 ] || n=$((n+1));n=$((n+l/5));split -l$n -d text textНо лучше оформить более читабельно и уметь принимать файл с любым именем, да и требовать, чтобы он был:
#!/bin/bash
( [ ! -f $1 ] || [ "$1" == "" ] ) && exit 1
n=0 ; l=$(wc -l $1) ; l=${l/$1}
[ $((l%5)) == 0 ] || n=$((n+1)) ; n=$((n+l/5))
split -l$n -a1 -d $1 $1Понятно, что если число строк не делится на пять, то поровну не получится.
Можно проверить, что это работает, сделав файл с любым количеством строк:
for (( i=0;i<число_строк;i++ )); do echo $i text$i >> text ; doneОтредактировано Linups_Troolvalds (06-06-11 15:39:10)
.:``́3̶E̶P̶O̶W̶h̶`́`:.
Вне форума
perl:
$i=0;
$n=0;
while(<STDIN>){
if($n>4){
$n=0;
$i++;
}
$_=~s/\n//;
`echo '$_' >>file$i.txt`;
$n++;
}Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©
Вне форума


perl:
Прекрасно, но условие было нарезать файл не на части по 5 строк, а на 5 равных частей. Для этого можно было также вызвать wc -l из пёрла.
В любом случае, задача сводится к максимально простому и быстрому подсчету \x0D\x0A (Windows) или \x0A (UNIX-like), желательно имеющимся в каждой системе готовым методом, нехитрому арифметическому действию и (опять же штатным системным средством) разбиению на заданное количество частей.
Добавлено спустя 36 мин 25 с:
А теперь можно кое-что сравнить.
"time" -f "Затрачено времени: %e, Макс.резидентный размер процесса (Кбайт): %M" php ./split.php
Затрачено времени: 1.64, Макс.резидентный размер процесса (Кбайт): 1402400
"time" -f "Затрачено времени: %e, Макс.резидентный размер процесса (Кбайт): %M" ./split.sh text
Затрачено времени: 0.09, Макс.резидентный размер процесса (Кбайт): 5616(Это для файла в миллион строк).
Отредактировано Linups_Troolvalds (06-06-11 15:38:19)
.:``́3̶E̶P̶O̶W̶h̶`́`:.
Вне форума
Linups_Troolvalds, а. Ну да это тоже фигня. А вот что делать с остатоком? Давай предположим, что если у нас остается лишних <5и строк, то мы их записываем в последний файл. Тогда решить можно вот так:
@data=<STDIN>;
$block=int((scalar @data)/5);
for($i=0;$i<5;$i++){
open F,">file$i.txt";
print F "@data[($i*$block)..($i*$block+$block-1)]";
close F;
}
$diff=(((scalar @data)/5)*10-$block*10)/2;
if($diff){
open F,">>file".($i-1).".txt";
print F "@data[-$diff..-1]";
close F;
}Добавлено спустя 03 мин 17 с:
З.Ы.
заморочки с умноженим на 10 из-за того, что иначе перл рисует какой-то странный хвост значениям..
Linups_Troolvalds, проверь мой скрипт на скорость.
Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©
Вне форума
[ Сгенерировано за 0.010 сек, 7 запросов выполнено - Использовано памяти: 1.77 Мбайт (Пик: 1.85 Мбайт) ]