Объявление

Односложные и бессмысленные темы, не несущие полезную нагрузку или не содержащие в себе вопрос, будут удаляться!

#1 05-06-11 22:12:48

Luca
Участник
Здесь с 03-09-09
Сообщений: 1,545
Windows 7Firefox 4.0

Разбить txt файл на части

Господа, есть заморочка. Есть txt файл. Пусть будет в 50 строк
1 дерево
2 дорога
...
50 корова

нужно разбить его на 5 равных частей при этом не пользуясь мышкой и клавиатурой.
на выходе должно быть 5 файлов:
text1 text2 .. text5
в каждом по 10 строк.

Решение в гугле нашел, но может кто не гугля предложит интересный вариант.

Вне форума

#2 05-06-11 22:23:34

SemyonKozakov
Журнашлюшка :)
Откуда: Саратов
Здесь с 28-11-09
Сообщений: 4,394
Сайт
Windows 7Chrome 11.0

Re: Разбить txt файл на части

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


nolinux.w2c.ru - море баттхерта и деаонимизации

Вне форума

#3 05-06-11 22:31:42

Lecarde
Участник
Здесь с 18-08-10
Сообщений: 334
Windows XPOpera 11.11

Re: Разбить txt файл на части

при этом не пользуясь мышкой и клавиатурой.

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

Вне форума

#4 05-06-11 22:48:50

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Разбить txt файл на части

Luca пишет:

нужно разбить его на 5 равных частей при этом не пользуясь мышкой и клавиатурой.

split -l10 -a1 -d text text

.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#5 05-06-11 23:07:04

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Internet Explorer 9.0

Re: Разбить txt файл на части

pastebin.com/JiWGQMy8

Руби всегда придет на помощь.


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

Вне форума

#6 05-06-11 23:10:21

pavel2403
Разбанен
Откуда: Санкт-Петербург
Здесь с 06-10-09
Сообщений: 1,129
Windows XPInternet Explorer 7.0

Re: Разбить txt файл на части

Linups_Troolvalds пишет:

split -l10 -a1 -d text text

А ты это носом вводить будешь через астрал??? Тебе же, блять, по-русски написали, мышей и клавой не пользоваться!!! smile


Господа, вы охуели. Все. ©Cэмен

Вне форума

#7 05-06-11 23:18:46

petrun
Участник
Здесь с 22-10-09
Сообщений: 3,172
LinuxFirefox 4.0

Re: Разбить txt файл на части

Luca пишет:

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

А чем пользуясь-то? силой мысли?


Анархия-мама сынов своих любит

Вне форума

#8 05-06-11 23:20:17

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Разбить txt файл на части

pavel2403 пишет:

А ты это носом вводить будешь через астрал???

Я думаю, код на похапэруби через астрал тоже не вводится. Почему вы пристали именно ко мне? Какие-то проблемы? roll

Отредактировано Linups_Troolvalds (05-06-11 23:24:28)


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#9 05-06-11 23:53:41

Дестер
Капитан
Здесь с 09-11-10
Сообщений: 737
Сайт
Windows 7Chrome 12.0

Re: Разбить txt файл на части

<?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);
    }
?>

А я придумал, как. Нужно просто воспользоваться планшетником с рукописным вводом. Стилус - это не мышка.

Вне форума

#10 06-06-11 00:01:50

Lecarde
Участник
Здесь с 18-08-10
Сообщений: 334
Windows XPOpera 11.11

Re: Разбить txt файл на части

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

Вне форума

#11 06-06-11 00:03:25

Дестер
Капитан
Здесь с 09-11-10
Сообщений: 737
Сайт
Windows 7Chrome 12.0

Re: Разбить txt файл на части

Lecarde, а как ты кавычки введёшь? Азбукой Морзе (кстати, где он?) насвистывать предлагаешь?

Вне форума

#12 06-06-11 01:15:01

Babusha
Нехристь
Здесь с 12-03-10
Сообщений: 2,221
Windows 7Internet Explorer 9.0

Re: Разбить txt файл на части

Дестер пишет:

str_replace("\r\n","",$array[$count1-1]);

Дестер пишет:

fopen("text".++$numfiles, "w");fwrite($file2,$string);fclose($file2);

Какое убожище, не дай сОтОна на таком программировать.

Linups_Troolvalds пишет:

Я думаю, код на похапэруби через астрал тоже не вводится. Почему вы пристали именно ко мне? Какие-то проблемы? roll

Нет, просто Паша знает что руби -- божественен, на руби следует молиться, логотип руби следует распечатать и он должен висеть в рамочке, по 8 штук в каждой комнате, руби излечивает рак php головного мозга.


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

Вне форума

#13 06-06-11 06:46:09

Lord_Evil
Master Of Darkness
Откуда: Deepest Pits Of Hell
Здесь с 06-06-10
Сообщений: 1,862
Сайт
Windows XPOpera

Re: Разбить txt файл на части

Разгоняежсо и ебошишь головой монитор. Текст будет разбит вместе с ним big_smile


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Вне форума

#14 06-06-11 08:12:18

pavel2403
Разбанен
Откуда: Санкт-Петербург
Здесь с 06-10-09
Сообщений: 1,129
Windows XPInternet Explorer 7.0

Re: Разбить txt файл на части

Lord_Evil пишет:

Разгоняежсо и ебошишь головой монитор. Текст будет разбит вместе с ним

+1, только прицелиться хорошо надо, что бы по 5 разбить... big_smile

Linups_Troolvalds пишет:

Почему вы пристали именно ко мне? Какие-то проблемы?

Наличие в мире таких как ты и есть главная проблема big_smile


Господа, вы охуели. Все. ©Cэмен

Вне форума

#15 06-06-11 09:10:46

Дестер
Капитан
Здесь с 09-11-10
Сообщений: 737
Сайт
Windows 7Chrome 12.0

Re: Разбить txt файл на части

Babusha пишет:

Какое убожище, не дай сОтОна на таком программировать.

Зато это работает.  wink

Вне форума

#16 06-06-11 10:15:11

Luca
Участник
Здесь с 03-09-09
Сообщений: 1,545
Windows 7Firefox 4.0

Re: Разбить txt файл на части

Lecarde пишет:

Силой мысли штоле?

нет, имелось ввиду не топорное решение. Выделил 10 строк, скопировал, создал файл вставил.

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

Вне форума

#17 06-06-11 13:07:18

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Разбить txt файл на части

pavel2403 пишет:

Наличие в мире таких как ты и есть главная проблема

Очень интересно. Было бы, будь я психатром. В любом случае, решить эту вашу личную проблему вы не в силах, так что лучше смириться и забить.
И заметьте, я понял топикстартера совершенно верно, в отличие от вас, решение очень простое и работает.

Отредактировано Linups_Troolvalds (06-06-11 13:07:38)


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#18 06-06-11 13:17:49

Дестер
Капитан
Здесь с 09-11-10
Сообщений: 737
Сайт
Windows 7Chrome 12.0

Re: Разбить txt файл на части

Linups_Troolvalds, в вашем решении нужно вручную вычислить количество строк в файле и поделить его на пять, да?

Вне форума

#19 06-06-11 13:27:19

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Разбить txt файл на части

Дестер пишет:

Linups_Troolvalds, в вашем решении нужно вручную вычислить количество строк в файле и поделить его на пять, да?

Если надо поделить на пять, тоже ничего особо сочинять не надо, можно так:

expr `wc -l text|sed 's/\x20.*//'` / 5

И остаток от деления, если у нас вдруг не делится на пять, то же самое, только не «/», а «%».


.:``́3̶E̶P̶O̶W̶h̶`́`:.

Вне форума

#20 06-06-11 13:46:24

Дестер
Капитан
Здесь с 09-11-10
Сообщений: 737
Сайт
Windows 7Chrome 12.0

Re: Разбить txt файл на части

А как это будет выглядеть одной командой?

Вне форума

#21 06-06-11 13:47:09

Lecarde
Участник
Здесь с 18-08-10
Сообщений: 334
Windows XPOpera 11.11

Re: Разбить txt файл на части

Luca пишет:

Буду дома попробую запаковать раром без сжатия, но с разбитием на тома, потом это дело попробую распаковать. Иересно что получится

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

Вне форума

#22 06-06-11 14:17:03

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Разбить txt файл на части

Дестер пишет:

А как это будет выглядеть одной командой?

Страшно.  yikes Например, так:

 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̶`́`:.

Вне форума

#23 06-06-11 14:47:31

Lord_Evil
Master Of Darkness
Откуда: Deepest Pits Of Hell
Здесь с 06-06-10
Сообщений: 1,862
Сайт
Windows XPInternet Explorer 8.0

Re: Разбить txt файл на части

perl:

$i=0;
$n=0;
while(<STDIN>){
   if($n>4){
      $n=0;
      $i++;
   }
   $_=~s/\n//;
   `echo '$_' >>file$i.txt`;
   $n++;
}

Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Вне форума

#24 06-06-11 14:52:41

Linups_Troolvalds
С нами Баг!
Откуда: Отовсюду
Здесь с 06-10-09
Сообщений: 2,100
LinuxChrome 14.0

Re: Разбить txt файл на части

Lord_Evil пишет:

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̶`́`:.

Вне форума

#25 06-06-11 15:55:07

Lord_Evil
Master Of Darkness
Откуда: Deepest Pits Of Hell
Здесь с 06-06-10
Сообщений: 1,862
Сайт
Windows XPInternet Explorer 8.0

Re: Разбить txt файл на части

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, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.010 сек, 7 запросов выполнено - Использовано памяти: 1.77 Мбайт (Пик: 1.85 Мбайт) ]