fgets и возврат каретки
От: fikka  
Дата: 19.06.02 21:23
Оценка:
Вот столкнулась с такой вещью:
есть текстовый файл, конец строки там обозначен только символом "\r", для fgets же признак конца строки — "\n", соответсвенно сейчас при чтение все строки лепятся воедино и получается одна большая строчище, что меня никак не устраивает...Что делать? Как-то ведь это наверняка обходится?
Re: fgets и возврат каретки
От: Slayer Россия  
Дата: 20.06.02 02:11
Оценка:
Здравствуйте fikka, Вы писали:

F>Вот столкнулась с такой вещью:

F>есть текстовый файл, конец строки там обозначен только символом "\r", для fgets же признак конца строки — "\n", соответсвенно сейчас при чтение все строки лепятся воедино и получается одна большая строчище, что меня никак не устраивает...Что делать? Как-то ведь это наверняка обходится?

Можно например заменить в файле или в буфере все символы '\r' на "\n\r".
Re[2]: fgets и возврат каретки
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 20.06.02 05:30
Оценка:
Здравствуйте Slayer, Вы писали:

S>Здравствуйте fikka, Вы писали:


F>>Вот столкнулась с такой вещью:

F>>есть текстовый файл, конец строки там обозначен только символом "\r", для fgets же признак конца строки — "\n", соответсвенно сейчас при чтение все строки лепятся воедино и получается одна большая строчище, что меня никак не устраивает...Что делать? Как-то ведь это наверняка обходится?

S>Можно например заменить в файле или в буфере все символы '\r' на "\n\r".



Можно отказаться от использования fgets, а читать побайтно. Вот, примерно так (набросал не глядя):


FILE* f = fopen("filename.fileext","r");

if(f) {


char cBuff[1024]; // буфер под строку

char cCh = 0;

int iCntr = 0;

    while( !feof(f) ) {

     if(fread(&cCh,1,1,f)) {

          if(iCntr<1023) {
           
            if(cCh!='\r' && cCh!='\n') cBuff[iCntr] = cCh;          

           }

           if(cCh=='\r' || cCh=='\n') {

                    cBuff[iCntr+1] = '\0'; // все, в буфере очередная строка
                 }

          iCntr++;          

       } else break;

    }

fclose(f);

}


Код, конечно, кривой, но главное — это принцип
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.