БлогNot. Как из-под Windows отредактировать текстовый файл больше 4 Гб?

Как из-под Windows отредактировать текстовый файл больше 4 Гб?

На открытии этого текстового файла размером 5,05 Гб в моей Windows 10 сдохли и текстовый редактор из Far Manager (ещё и "загасив" браузер), и Excel 2016 (этот, конечно, просто открыл первые 1048576 строк), и Notepad++ (сказал, что файл слишком велик и открыть невозможно). WinRAR, правда, сумел это довольно шустро заархивировать, получив архив .zip размером в 1,1 Гб.

Где взять текстовый редактор, который умеет не только просматривать, но и редактировать большие текстовые файлы? Условно бесплатный и довольно компактный EmEditor с задачей справился!

Файл в нём можно загружать по частям и есть панель управления большими файлами, автоматически появляющаяся при открытии таковых, комбинация клавиш Ctrl+G позволяет быстро перейти к нужной строке, а Ctrl+Shift+End быстро выделит всё до конца.

Ложка дёгтя - бесплатный ознакомительный период в 30 дней, а потом подписка за 40 долларов, но для "разовых" работ всё равно ничего лучше не нашёл (а вы, читатели?). Из меню "Справка" можно перейти на бесплатную версию, но она как раз "очень большие файлы" (в доке написано, что до 16 терабайт) не поддерживает.

Ну а файлом, с которым я баловался, были, конечно, простые числа. С помощью проекта, сделанного на основе библиотеки primesieve выяснил, что в границах поиска до 10 миллиардов (1e10) существует 94 729 788 простых чисел.

Сама библиотека утверждает, что умеет работать до границы поиска 264 или 18 446 744 073 709 551 616, округляя вниз, имеем 18 квинтиллионов (по-европейски - триллионов), 18e18 в экспоненциальной форме записи.

Вот программа для поиска и сохранения в текстовом файле всех простых чисел до 10 000 000 000 (десяти миллиардов).

#include <iostream>
#include <fstream>
#include <primesieve.hpp>

int main() {
 primesieve::iterator it;
 uint64_t prime = it.next_prime();
 uint64_t limit = 1e10;

 std::ofstream f("primes.txt");
 if (!f) {
  std::cout << "Can't create primes.txt, check permissions, please" << std::endl;
  return 1;
 }

 for (; prime < limit; prime = it.next_prime()) {
  f << prime << std::endl;
 }
 
 f.close();
 std::cout << "Done, see primes.txt" << std::endl;
 return 0;
}

А здесь мы просто суммируем простые числа в границах первого миллиарда и определяем их количество.

#include <iostream>
#include <primesieve.hpp>

int main() {
 primesieve::iterator it;
 uint64_t prime = it.next_prime();
 uint64_t sum = 0, cnt = 0;

 for (; prime < 1000000000; prime = it.next_prime()) {
  cnt++;
  sum += prime;
 }

 std::cout << "Count = " << cnt << ", Sum  = " << sum << std::endl;
 return 0;
}

Count = 50847534, Sum  = 24739512092254535

Обе консольных программки выполнялись в актуальной сборке Visual Studio 2019.

Так как на основном удалённом диске место что-то подзабито, выложу файл в другое место. Впрочем, сервисы Гугль всё равно не могут ни просмотреть, ни проверить на вирусы этот файл, хотя скачать можно. Возможно, это временная ссылка.

 Скачать архив .zip с файлом .txt с Яндекс-диска, все простые числа до 10 миллиардов, размер архива 1,1 Гб, размер файла более 5 Гб, возможно, ссылка временная

23.10.2021, 11:51 [747 просмотров]


теги: textprocessing c++ памятка софт числа

К этой статье пока нет комментариев, Ваш будет первым