URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5196
[ Назад ]

Исходное сообщение
"как убрать служебный символ ^M в досовских файлах"

Отправлено сс , 02-Мрт-06 13:58 
пишу прогу реально надо их выкинуть
я делаю так но получается тарабарщина -Ю
char buffer - тут храниться строка
char *buf;
len=strlen(buffer);
buf =(char *)malloc(len);
strncpy(buf,buffer,len-2); В очень большой надежде что не нужные символы отрежуться
И они отрезаются но если допостим оригинал выглядил так^M
то после обработки так
И они отрезаются но если допостим оригинал выглядил так?№

вобщем за место отрезанных мною символами остается мусор
ПОМАГИТЕ


Содержание

Сообщения в этом обсуждении
"как убрать служебный символ ^M в досовских файлах"
Отправлено Hordi , 02-Мрт-06 15:10 
Это если ожидаем ОДИН символ 0x0D в конце

const char *buffer = "xstr..."; //строка
unsigned int len = strlen(buffer);
char *pBuf = (char*)buffer;
if(len && 0x0D==buffer[len-1]){
    pBuf = (char*)memcpy(malloc(len),buffer,len);
    pBuf[len-1] = 0;
}


//используем pBuf только для чтения!!!
...

if(pBuf!=buffer)
    free(pBuf);



"как убрать служебный символ ^M в досовских файлах"
Отправлено RedEyes , 02-Мрт-06 17:36 
>пишу прогу реально надо их выкинуть

Если руками по всему файлу во vi очень просто получается:

:%s/^V^M//g

^V^M - это значит CTRL-V CTRL-M

CTRL-V переводит терминал в режим, который не будет считать следующий символ управляющим, а напечает его.

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



"как убрать служебный символ ^M в досовских файлах"
Отправлено vic , 02-Мрт-06 18:43 
>>пишу прогу реально надо их выкинуть
>
> Если руками по всему файлу во vi очень просто получается:
>
>:%s/^V^M//g
>
>^V^M - это значит CTRL-V CTRL-M
>
>CTRL-V переводит терминал в режим, который не будет считать следующий символ управляющим,
>а напечает его.
>
>а если программно: чтобы правильно отрезать нужно правильно семь раз отмерить.
>распечатай содержимое буферов, посмотри, что у тебя там, прицелься хорошенько.

руками..
tr -d "\r" < file.dos > file.nix


"как убрать служебный символ ^M в досовских файлах"
Отправлено Hordi , 02-Мрт-06 19:48 
Однозначно руками проще.
Если программно, то кроме 0x0D еще нужно 0x0A выкидывать

"как убрать служебный символ ^M в досовских файлах"
Отправлено Matracc , 05-Мрт-06 17:10 
1. Если нужно сделать это именно средствами вашей программы, то просто меняем местами байты в словах, которые имеют значения 0x0D0A (или 0x0A0D - точно не помню, как именно).
2. Если можно пользоваться другими програмамми, то iconv. Можно даже подключить libiconv.so в свою прогу... Я бы, конечно, рекомендовал решать такую простую задачу своими силами. Нечего систему нагружать


"как убрать служебный символ ^M в досовских файлах"
Отправлено aler , 17-Мрт-06 07:58 
>пишу прогу реально надо их выкинуть
>я делаю так но получается тарабарщина -Ю
>char buffer - тут храниться строка
>char *buf;
>len=strlen(buffer);
>buf =(char *)malloc(len);
>strncpy(buf,buffer,len-2); В очень большой надежде что не нужные символы отрежуться
>И они отрезаются но если допостим оригинал выглядил так^M
>то после обработки так
>И они отрезаются но если допостим оригинал выглядил так?№
>
>вобщем за место отрезанных мною символами остается мусор
>ПОМАГИТЕ

я делаю так:

col -bx < dosfile > newfile