Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа со строками в большо файле  (Прочитано 24835 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
perl6
Помогающий

ru
Offline Offline

« : 28-07-2017 17:03 » 

Приветствую. Никак не соображу, как средствами перла порезать файл на n строк.
Имеем файл, к примеру, строк на 30к. Нужно вывести первые 3к, потом след. и так, до конца.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 28-07-2017 17:15 » 

Стандартный способ практически применимый для всех языков.
1) читать строку
2) писать в файл
3) считать количество строк
4) Если количество строк превысило определенное значение, закрыть дескриптор файла. Открыть новый файл для записи.

Может быть в перле сделали более легкий путь.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
perl6
Помогающий

ru
Offline Offline

« Ответ #2 : 28-07-2017 19:31 » 

Стандартный способ практически применимый для всех языков.
1) читать строку
2) писать в файл
3) считать количество строк
4) Если количество строк превысило определенное значение, закрыть дескриптор файла. Открыть новый файл для записи.

Может быть в перле сделали более легкий путь.
Памяти не хватит, файлы то здоровые.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 29-07-2017 03:01 » new

Ты в данный конкретный момент работаеш с 1 единственной строкой. Считал ее из источника, записал в файл. Больше она тебе не нужна. 

Добавлено через 5 часов, 35 минут и 58 секунд:
Вот по быстрому накидал решение данной задачи в bash скрипте. Не проверял, но надеюсь, что должно работать Улыбаюсь
Код: (Bash)
 #! /bin/bash
name="somefilename"
where="wherefile"
maxcount=3000

count=maxcount
chap=0
while read LINE; do
    if [ $count -ge $maxcount ]; then
        chap=$(( $chap + 1 ))
        touch "$where$chap"
        count=0
    fi
    echo $LINE >> "$where$chap"
    count=$(( $count + 1 ))
done < "$name"
« Последнее редактирование: 29-07-2017 08:37 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
perl6
Помогающий

ru
Offline Offline

« Ответ #4 : 29-07-2017 09:51 » 

Ты в данный конкретный момент работаеш с 1 единственной строкой. Считал ее из источника, записал в файл. Больше она тебе не нужна. 
Так все равно весь файл надо в память грузить. Записывать данные мне не нужно, мне нужно их отправлять на сервер.

Добавлено через 1 минуту и 11 секунд:
Вот по быстрому накидал решение данной задачи в bash скрипте. Не проверял, но надеюсь, что должно работать Улыбаюсь
Код: (Bash)
 #! /bin/bash
name="somefilename"
where="wherefile"
maxcount=3000

count=maxcount
chap=0
while read LINE; do
    if [ $count -ge $maxcount ]; then
        chap=$(( $chap + 1 ))
        touch "$where$chap"
        count=0
    fi
    echo $LINE >> "$where$chap"
    count=$(( $count + 1 ))
done < "$name"
Спасибо. Задачу решил сам, несколько другим способом.
« Последнее редактирование: 29-07-2017 09:52 от perl6 » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines