Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Определить и записать смещение каждой строки (http://forum.oszone.net/showthread.php?t=213170)

S.T.R.E.L.O.K. 13-08-2011 11:55 1730972

Определить и записать смещение каждой строки
 
Требуется написать программу на C# (но буду благодарен и за теорию).
Производится чтение из текстового файла (кодировка ANSI).
Нужно определить смещение первого символа каждой строки, вписать все смещения этих символов в файл (то есть получается бинарный файл).

вопрос состоит в том каким образом можно считать эти смещения и записать их в виде:
00000000 00000001 (без пробелов :), то есть при открытии этого файла видим в hex-редакторе видим "ссылки" на определённое смещение)

Busla 13-08-2011 14:13 1731033

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 1731180

Цитата:

Цитата Busla
Для windows надо искать последовательность двух символов с кодами 0D и 0A »

да, последовательность именно такая. тогда изменю немного вопрос, как найти смещение символа с кодом 0D и минус ещё один символ из самого смещения (в последующей обработке символы перехода на новую строку будут удаляться), если не ошибаюсь.
Цитата:

Цитата Busla
Так же существует спецсимвол обозначающий конец текстового файла, правда в реальной жизни практически не встречается, но формально, встретив его, нужно завершить чтение текстового файла и конечно же не считать символом новой строки, даже если он идёт за 0x0D0A. »

в моём случае, данного символа нет.
Цитата:

Цитата Busla
Есть ли ограничение на размер входящего файла? - мне попадались логи объёмом по 3Гб. Если смещение представлять традиционным int (что в корне неверно, т.к. он знаковый), то корректно обработаются только файлы объёмом до двух гигабайт; если беззнаковым int - до 4 Гб »

для моего случая так же не существенно. файлы, которые придётся обработать не больше 2 мб, но их более 100.

Busla 14-08-2011 11:55 1731450

S.T.R.E.L.O.K., не понимаю суть затруднений: вы не знаете как читать из двоичного файла, или что такое смещение?

S.T.R.E.L.O.K. 14-08-2011 13:09 1731493

Busla, не знаю как определить смещение :). да и работать с ними в C# не особо

Busla 15-08-2011 09:55 1732055

А что его определять-то: чтобы анализировать символы, нам нужно читать данные побайтно: байт прочитал, увеличил счётчик - этот счётчик и есть смещение.


Время: 03:31.

Время: 03:31.
© OSzone.net 2001-