Показать полную графическую версию : [решено] Определить и записать смещение каждой строки
S.T.R.E.L.O.K.
13-08-2011, 11:55
Требуется написать программу на C# (но буду благодарен и за теорию).
Производится чтение из текстового файла (кодировка ANSI).
Нужно определить смещение первого символа каждой строки, вписать все смещения этих символов в файл (то есть получается бинарный файл).
вопрос состоит в том каким образом можно считать эти смещения и записать их в виде:
00000000 00000001 (без пробелов :), то есть при открытии этого файла видим в hex-редакторе видим "ссылки" на определённое смещение)
S.T.R.E.L.O.K., Есть нюанс, как закодировано окончание строки - в разных ОС разные соглашения о формате текстовых файлов. Для windows надо искать последовательность двух символов с кодами 0D и 0A - следующий символ - будет первым символом новой строки.
Так же существует спецсимвол обозначающий конец текстового файла, правда в реальной жизни практически не встречается, но формально, встретив его, нужно завершить чтение текстового файла и конечно же не считать символом новой строки, даже если он идёт за 0x0D0A.
Есть ли ограничение на размер входящего файла? - мне попадались логи объёмом по 3Гб. Если смещение представлять традиционным int (что в корне неверно, т.к. он знаковый), то корректно обработаются только файлы объёмом до двух гигабайт; если беззнаковым int - до 4 Гб.
S.T.R.E.L.O.K.
13-08-2011, 19:16
Для windows надо искать последовательность двух символов с кодами 0D и 0A »
да, последовательность именно такая. тогда изменю немного вопрос, как найти смещение символа с кодом 0D и минус ещё один символ из самого смещения (в последующей обработке символы перехода на новую строку будут удаляться), если не ошибаюсь.
Так же существует спецсимвол обозначающий конец текстового файла, правда в реальной жизни практически не встречается, но формально, встретив его, нужно завершить чтение текстового файла и конечно же не считать символом новой строки, даже если он идёт за 0x0D0A. »
в моём случае, данного символа нет.
Есть ли ограничение на размер входящего файла? - мне попадались логи объёмом по 3Гб. Если смещение представлять традиционным int (что в корне неверно, т.к. он знаковый), то корректно обработаются только файлы объёмом до двух гигабайт; если беззнаковым int - до 4 Гб »
для моего случая так же не существенно. файлы, которые придётся обработать не больше 2 мб, но их более 100.
S.T.R.E.L.O.K., не понимаю суть затруднений: вы не знаете как читать из двоичного файла, или что такое смещение?
S.T.R.E.L.O.K.
14-08-2011, 13:09
Busla, не знаю как определить смещение :). да и работать с ними в C# не особо
А что его определять-то: чтобы анализировать символы, нам нужно читать данные побайтно: байт прочитал, увеличил счётчик - этот счётчик и есть смещение.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.