0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 3

Работа с файлами больших размеров

25.03.2018, 11:53. Показов 1611. Ответов 6

Студворк — интернет-сервис помощи студентам
Приветствую!!
Есть файл следующего вида:
1e;Moscow;1122334455
2r;Novosibirsk;12321
3b;Kursk;2131
4v;Moscow;5544
5c;Rostov;699753
Нужно пройтись по файлу, найти совпадения во вторых столбцах и, если таковые имеются, сложить значения из третьего столбца напротив каждого из них и записать в выходной файл. Если совпадений нет, то просто записать в файл.
Т.е. представленный пример после обработки будет выглядеть так:
1e;Moscow;1122339999
2r;Novosibirsk;12321
3b;Kursk;2131
5c;Rostov;699753
С этой задачей на отлично справляется следующий код (при условии, что размер файла относительно небольшой - менее 800МБ):
Perl
1
2
3
4
5
6
7
8
9
10
11
12
    while (<filein>) {
        chomp;
        my ($tx, $city, $num) = split /;/;
        $table{$city} = [] unless exists $table{$city};
        push @{$table{$city}}, $num;
    }
    foreach $city (keys %table) {
        my @num = @{$table{$city}};
        $sum = eval join '+', @num;
        print fileout "$city;$sum\n";
        $i++;
    }
НО требуется работать с большими файлами - более 6ГБ. Как исправить или адаптировать код под эти цели?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2018, 11:53
Ответы с готовыми решениями:

Как работать с файлами больших размеров
Вечер добрый. Прошу проконсультироать. Смыл программы такой - беру несколько текстовых файлов, каждый по 80-100 Мб и сравниваю их по...

Работа с изображениями больших размеров
Здравствуйте! Дали задание написать программу для обработки изображений. Но изображение довольно большие, свыше 100 МБ. tiff и...

Контейнер больших размеров
Иногда приходится решать задачи, где требуется выделить память под огромный массив (более 4 Гб). Тут простым выделением памяти не...

6
 Аватар для volodin661
6566 / 2212 / 344
Регистрация: 10.12.2013
Сообщений: 7,620
25.03.2018, 15:43
Цитата Сообщение от ParmeZan Посмотреть сообщение
НО требуется работать с большими файлами
В чём заключается работа ?
0
25 / 25 / 14
Регистрация: 29.09.2014
Сообщений: 165
25.03.2018, 16:44
я не спец конечно , но думаю раз структура файла известна , то через базу работайте сначала туда данные перегоните а потом изменяйте значения.
можно еще в сторону nosql смотреть на пример hadoop или в промежуточный файл юзать за место базы. Если все таки в памяти такой массив держать то придется докупить озу задача конечно интересная у Вас.
0
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 3
26.03.2018, 19:55  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
В чём заключается работа ?
В этом:
Цитата Сообщение от ParmeZan Посмотреть сообщение
Нужно пройтись по файлу, найти совпадения во вторых столбцах и, если таковые имеются, сложить значения из третьего столбца напротив каждого из них и записать в выходной файл. Если совпадений нет, то просто записать в файл.
Добавлено через 2 минуты
Цитата Сообщение от CurrentUser Посмотреть сообщение
я не спец конечно , но думаю раз структура файла известна , то через базу работайте сначала туда данные перегоните а потом изменяйте значения.
можно еще в сторону nosql смотреть на пример hadoop или в промежуточный файл юзать за место базы. Если все таки в памяти такой массив держать то придется докупить озу задача конечно интересная у Вас.
С БД у меня минимальный опыт взаимодействия, изучение застопорит работу над скриптом... Сейчас пробую использовать промежуточный файл, но с трудом представляю, как он может заменить массив. Может быть есть какие-нибудь примеры?
0
 Аватар для volodin661
6566 / 2212 / 344
Регистрация: 10.12.2013
Сообщений: 7,620
26.03.2018, 22:29
Цитата Сообщение от ParmeZan Посмотреть сообщение
Сообщение от volodin661
В чём заключается работа ?
В этом:
Сообщение от ParmeZan
Нужно пройтись по файлу, найти совпадения во вторых столбцах и, если таковые имеются, сложить значения из третьего столбца напротив каждого из них и записать в выходной файл. Если совпадений нет, то просто записать в файл.
Мы тоже умеем прикидываться идиотами:
надо так изменить программу на языке Perl, чтобы всё происходило очень быстро вне зависимости от размера файла
и того, что надо делать.
0
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 3
26.03.2018, 22:45  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
Мы тоже умеем прикидываться идиотами
Очень рад за Ваши умения, но оффтоп мне малополезен... если можно, то давайте продолжим по теме.
0
 Аватар для volodin661
6566 / 2212 / 344
Регистрация: 10.12.2013
Сообщений: 7,620
27.03.2018, 05:13
Появление файла почти под миллиард строк
Кликните здесь для просмотра всего текста
6Гб это 300 000 000 строк заполненных вот этим вот:
1e;Moscow;1122334455
2r;Novosibirsk;12321

вызывает очевидное недоумение.

Кто же конечный потребитель всего этого г... добра ?

Зачем суммировать числа и опять писать в такой же файл, кому станет легче;
зачем называть бессмысленное пиление жёсткого диска 'работой'?

Будут ещё файлы с подобной ценной информацией? Что тогда делать с предыдущими ?

Как правильно написал ТекущийПользователь, такого рода задачи
решаются подтягиванием механизма БД для избавления от программиста от разного рода мучений;
от него требуется написать только простенький загрузчик файла в базу, а все манипуляции с данными будут уже
производиться по стандартным схемам ( будь то SQL или ORM ).

В данном случае можно посмотреть также в сторону интерфейса DB_FILE, входящего в состав стандартных perl-модулей
http://perldoc.perl.org/DB_Fil... or-greater
в качестве замены этого чудовищного плоского файла на файл «Berkeley DB»

PS: фразу ParmeZan
изучение основ DB застопорит работу над скриптом
оставлю на совести последнего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.03.2018, 05:13
Помогаю со студенческими работами здесь

Массив очень больших размеров
Нужно создать массив размера 4000000 400. Естественно мы получим ошибку &quot;java.lang.OutOfMemoryError: Java heap space&quot; если такое...

Копирование файлов больших размеров
Задача состоит в том ,чтобы разделить большой файл на части и копировать их в отдельных потоках.Как можно это сделать?

Ступенчатый массив больших размеров
Подскажите пожалуйста , есть ли в языке С# возможность описания ступенчатого массива больших размеров : количество ...

Вычисление определителей матриц больших размеров
Имеются в виду определители 6 7 8 9 и т.д порядков. 2 и 3 это можно сделать и в лоб.но вот более высоких порядков получаются долгие...

Как вывести матрицу больших размеров
нужно сделать таким образом пусть пользователь решил создать матрицу 30 на 30 как сделать так что бы мы видели только какуюто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru