Мне нужна программа, которая считывает содержимое файла и записывает его в другой файл, но только символы, которые являются допустимыми символами utf-8. Проблема в том, что файл может поступать в любую кодировку, и содержимое файла может или не может соответствовать такой кодировке.Как проверить, действителен ли символ в C++
Я знаю, что это беспорядок, но это данные, с которыми я работаю. Файлы, которые мне нужно «очистить», могут быть такими же большими, как пара терабайт, поэтому мне нужна программа, которая будет настолько эффективной, насколько это возможно по-человечески. В настоящее время я использую программу, которую пишу на питоне, но для очистки 100 гб требуется неделя.
Я думал о чтении символов с помощью функций w_char, а затем управлял их целыми числами и отбрасывал все числа, которые не находятся в некотором диапазоне. Является ли это оптимальным решением?
Также каков наиболее эффективный способ читать и писать на C/C++?
EDIT: Проблема не в операциях ввода-вывода, эта часть вопроса предназначена для дополнительной помощи, чтобы иметь еще более быструю программу, но реальной проблемой является то, как быстро идентифицировать символ UTF. Кроме того, я уже пробовал palatalization и RAM диски.
Неделя ??? Кормите этих мышей и быстрее поворачивайте колеса! – Duck
Вы говорите, что проблема не в IO, но требуется неделя? Действительно ли Cpu использует 100% ядра? Если да, то, возможно, покажите ключевую часть источника. Программа, использующая fread() и т. Д. В C/C++, сделала бы это быстро, поэтому каждый, естественно, принимал проблемы с IO. Или вы больше спрашиваете, как написать все это на C++? – rlb
@ rlb Вопрос должен был заключаться в том, как эффективно отбрасывать недействительные символы utf8 (ЦП переходит на 100% почти всю неделю, чтобы завершить его). Производительность ввода-вывода - это просто сделать ее еще быстрее (у меня есть время, и это программное обеспечение будет использоваться много, поэтому небольшие улучшения производительности равны нескольким дням). Я профилировал свой код на Python, и проблема связана с функциями обработки строк и кодированием/декодированием. Вот почему я спрашиваю, будет ли управление ими целыми числами правильным подходом (я также очень признателен за другие предложения). – Topo