Я разрабатываю импортерную программу для импорта больших текстовых файлов utf8 (символьные байты) в C#. если я загружаю весь 20GB-файл в ОЗУ, это решение не подходит и возможно. лучше разделить файл на несколько меньших файлов для обработки. Теперь моя проблема заключается в разделении обработки файла. мое решение читает файл по строкам и разбивает их, если номер строки - это мое подходящее число. но я думаю, что это не быстрое решение для чтения файла по строкам для разделения. время расщепления велико. есть алгоритм для разделения больших файлов utf8 на несколько файлов без чтения по строкам и быстрее.Обработка огромных файлов utf8 с разбиением на несколько файлов
ответ
Мои предложения по вашей проблеме приведены ниже. Это я думал, имея в виду разделение беспокойства, так как разделение файла и обработка файла могут быть отделены для лучшего обслуживания.
- Прочитайте файл в двоичном, а не текст
- ли построчно не читать, как вам не требуется чтение файла для расщепления.
- Использование поиска. См. link.
- Если вам нужно сохранить разделенные файлы с полными строками, то после поиска позиции, поиска следующего символа конца строки и последующего разделения файла соответствующим образом.
- После того как файлы разделены, обработайте файлы по отдельности.
спасибо за ваш ответ, но, знаете, моя проблема заключается в определении числа, в котором доза не разделяется на символ, например, utf-8 является переменной длиной, и я не знаю, что 1000-байтовый символ является символом конца или является середина символа, потому что в utf-8 символ может принимать до 4 байтов. – user2352554
Yeh Я пропустил кодировку utf-8. В любом случае, в этом случае, как только вы пытаетесь найти какую-либо случайную позицию, вам нужно проверить, находится ли ее середина или нет. characterStartDetector = (pos, data) => (data & 0x80) == 0 || (данные & 0x40)! = 0; См. Http://stackoverflow.com/questions/452902/how-to-read-a-text-file-reversely-with-iterator-in-c-sharp. Также см. Http://stackoverflow.com/questions/31008038/opening-inputstreamreader-in-the-middle-of-utf-8-stream. Вторая ссылка - java, например. Его не сложно понять, используя его в C# –
- 1. обработка огромных файлов несколько раз в JAVA
- 2. Обработка огромных файлов в C#
- 3. Обработка огромных файлов в java
- 4. Обработка огромных yaml-файлов через php
- 5. Golang: Обработка 5 огромных файлов одновременно
- 6. Сохранение огромных файлов
- 7. C++ Проблемы с разбиением кода на несколько файлов
- 8. Обработка типов файлов, содержащих несколько файлов?
- 9. Обработка файлов на С ++
- 10. Обработка огромных файлов json-массива с помощью jq
- 11. Проблемы с разбиением файлов с помощью C#
- 12. Написание огромных XML-файлов с помощью StAX
- 13. Чтение огромных файлов с использованием файлов с памятью
- 14. Обработка файлов на Perl
- 15. Обработка файлов на Python
- 16. NSURLSession фоновая загрузка огромных файлов
- 17. Чтение огромных текстовых файлов Java
- 18. Обработка файлов на Python?
- 19. VTD-XML Модификация огромных файлов
- 20. Селективная конкатенация двух огромных файлов
- 21. Чтение файлов из UTF8
- 22. Обработка файлов с pyQT
- 23. Обработка файлов
- 24. Много мелких файлов или пару огромных?
- 25. C# обработка UTF8 текстовых файлов и Degree символов
- 26. Обработка файлов проекта, когда несколько пользователей совершают
- 27. Разбор нескольких XML-файлов с разбиением на страницы в PHP
- 28. Python обработка файлов многопоточность
- 29. Обработка больших файлов данных
- 30. Обработка больших файлов на Android
Нет. Нет другого способа разделить файлы (по крайней мере, в Windows), чем читать весь источник и записывать все файлы назначения. Вы можете сделать небольшую оптимизацию (нужно было бы увидеть код для рекомендаций), но это было ограничено тем фактом, что вам нужно передать 2x размер файла с/на диски. –
спасибо за ваш комментарий, примерно я потратил около 10 часов на то, чтобы найти ответ на мой вопрос, но я не нашел ответа, я думаю, что ваш комментарий поможет мне принять решение. в utf-8, у меня нет решения без чтения строки за строкой tp, разделить файл и может быть разделение, не было хорошим решением для этого. – user2352554