Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Oksana
Гость





СообщениеДобавлено: Пт Июн 27 2003 15:59    Заголовок сообщения: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Друзья, подскажите,
С помощью каких операторов или функций можно осуществить замену знака табуляции на "," в файле с расширением dat с посощью C или Pascal?
Вернуться к началу
vladgul
Гость





СообщениеДобавлено: Пт Июн 27 2003 16:52    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Самый простой и самый долгий вариант (если файл не большой, то не страшно)
В паскале:
Var
FSource, FDestination :File of byte; // Объявляешь типизированные файлы и переменную для чтения.
Buff:Byte;

..открываем файлы....

While not eof(F) do
//Пока исходный файл не закончен
begin
read(FSource,Buff); // чтение из файла
// проверка на твой символ.
If buff=9 then //Если символ табуляции (код 9)
Buff:=Ord(','); // Тогда меняем на ','
write(FDEstionation,Buff);
end;

..Закрываем файлы...
Все.
Вернуться к началу
Oksana
Гость





СообщениеДобавлено: Пн Июн 30 2003 10:12    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Спасибо.

А чем, кроме продолжительности по времени, грозит данный способ, при большом файле (столбцов около 400, а строк около 1000) ?
Вернуться к началу
Oksana
Гость





СообщениеДобавлено: Пн Июн 30 2003 10:32    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Еще один вопросик: если эту замену в Паскале делать долго, то с помощью чего ее можно осуществить еще?
Вернуться к началу
vladgul
Гость





СообщениеДобавлено: Пн Июн 30 2003 10:33    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Ничем не грозит.
Если ты хочешь повысить быстродействие, то можно использовать нетипизированные файлы.
Var
F,F1:File;
Buffer:array [1..4096] of byte;
I,CountRead:Integer;
.....
Reset(F,1);
ReWrite(F1,1);
.. ..
BlockRead(F,Buffer,SizeOf(Buffer),CountRead);
I:=1;
Wh ile (ii то произошла ошибка записи.

Этот способ намного быстрее.
Почитай Help по процедурам
BlockRead,
BlockWrite


Кстати, а откуда такой файл взялся?
Может быть проще вообще ничего не менять?
Или в дальнейшем (ты же как-то собираешься использовать эту ',' если программно, то нет никакой разницы бкдет это ',' или знак табуляции. А если потом результат надо будет "подтянуть" в какую-либо программу, то там тоже (скорее всего) можно настроить разделитель колонок.
Вернуться к началу
vladgul
Гость





СообщениеДобавлено: Пн Июн 30 2003 10:36    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Написал хороший ответ, а сервер ругнулся на отсылку сообщения Sad(((( И все пропало Sad(((

Кратко.
Почитай help по функциям BlockRead и BlockWrite.

А также, откуда взялся такой файл и как или куда его будешь использовать. Может быть есть способ проще.
Вернуться к началу
Oksana
Гость





СообщениеДобавлено: Пн Июн 30 2003 12:00    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Это файл данных (цифры) сохраненный из программы SPSS как tab-delimited (.dat) и его надо преобразовать (tab заменить на ,), причем в нем около 450 переменных (столбцов) и около 1000 строк.
???? Wink))
Вернуться к началу
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Пн Июн 30 2003 16:17    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Файл tab2cma.cpp:

#include
#include

#define LEN 2048
#define SEARCHER 9
#define REPLACER ','


int main( int argc, char **argv )
{
if( argc != 3 ) return printf( "tab2cma infile outfile\n:" );
FILE *f = fopen( argv[ 1 ], "rb" );
if( !f ) return printf( "can't open file %s for reading\n", argv[ 1 ] );
FILE *o = fopen( argv[ 2 ], "wb" );
if( !o ) return printf( "can't open file %s for writing\n", argv[ 2 ] );

char buf[ LEN ], *p;
int l;

while( l = fread( buf, 1, LEN, f ) )
{
while( p = (char *)memchr( buf, SEARCHER, l ) )
*p = REPLACER;
fwrite( buf, 1, l, o );
}

fclose( o );
fclose( f );

return 0;
}

компилил 3-м борландом и проверял.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Пн Июн 30 2003 16:20    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Patch:
include stdio.h и include conio.h в угловых скобках, которые были приняты за фуфло и проигнорированы !
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Пн Июн 30 2003 16:21    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

пардон, не conio.h а string.h
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Вт Июл 01 2003 11:27    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Итак, окончательный вариант :

файл tab2coma.cpp:

#include stdio.h
#include string.h

#define LEN 2048
#define SEARCHER 9
#define REPLACER ','

int main( int argc, char **argv )
{
if( argc != 3 ) return printf( "usage: tab2coma infile outfile\n:" );
FILE *f = fopen( argv[ 1 ], "rb" );
if( !f ) return printf( "can't open file %s for reading\n", argv[ 1 ] );
FILE *o = fopen( argv[ 2 ], "wb" );
if( !o ) return printf( "can't open file %s for writing\n", argv[ 2 ] );

char buf[ LEN ], *p;
int l;

while( l = fread( buf, 1, LEN, f ) )
{
for( p=buf; p = (char *)memchr( p, SEARCHER, l - (p-buf) ); )
*p = REPLACER;
fwrite( buf, 1, l, o );
}

fclose( o );
fclose( f );

return 0;
}

примечания:
stdio.h и string.h в угловых скобках. Скорость за 6 МБ/сек на П4-1700
компилятор - Borland C++ 3.1
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Oksana
Гость





СообщениеДобавлено: Вт Июл 01 2003 14:22    Заголовок сообщения: Re: Замена знака табуляции на "," в файле с расширением dat с посощью C или Pascal Ответить с цитатой

Спасибо.

Сейчас проэкпериментирую.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...