The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"как убрать служебный символ ^M в досовских файлах"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "как убрать служебный символ ^M в досовских файлах"  
Сообщение от Hordi email on 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);


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

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

:%s/^V^M//g

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

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

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


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "как убрать служебный символ ^M в досовских файлах"  
Сообщение от aler (ok) on 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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру