Модераторы: Daevaorn

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Подрезание потока, С++ Borl 3.1 
:(
    Опции темы
Знак
  Дата 14.6.2005, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2005

Репутация: -5
Всего: нет



Столкнулся с проблемой
подскажите пожалуйста по
следующему вопросу.

Есть поток из файла
все нормально

читаем get()
записываем put()

Нужно мне следующее
найти повторения знаков в потоке
и уменьшить их до одного!
к примеру поток "фкаюдролвапжФФФФФФФФФюлоажожыдва"
здесь повторяються букввы "Ф", как удалить лишние и оставить
только одну "Ф" ? Мне удалось их только перезаписать
другим символом но сам поток укоротить не удалось.

Есть ли функция для подрезания потока?
Что бы не мучить проц перезаписью в массив и в файл? smile
--------------------
Ищу 2 файлаowl.tchwindows.tch 
PM MAIL   Вверх
Знак
Дата 14.6.2005, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2005

Репутация: -5
Всего: нет



Смотрел remuve()

не годиться!

может кто алгоритм напишет?
--------------------
Ищу 2 файлаowl.tchwindows.tch 
PM MAIL   Вверх
vadims
Дата 15.6.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 8.6.2005

Репутация: 2
Всего: 17



Попробуй например через fwrite записать 0 байт.
С потоками не пробовал, но при использовании функции write работает 100%.

Вот только в чем же мучение открыть другой поток и туда валить результат ??? Наоборот более надежно - если в процессе работы например отключиться электричество ты сохранишь исходный набор данных


--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
Fantasist
Дата 15.6.2005, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Знак
Приведи код, как читаешь. Так вообще не вижу в задаче ничего сложного - запоминай последний введенный символ, и если он совпадает - игнорируй.




--------------------
Волны гасят ветер...
PM MAIL   Вверх
Знак
Дата 16.6.2005, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2005

Репутация: -5
Всего: нет



9 vadims - 0 байт и останется в файле? т.е.
был поток "фкаюдролвапжФФФФФФФФФюлоажожыдва"
станет "фкаюдролвапжФ00000000юлоажожыдва"
нулики конечно видно не будет.
, а мне надо "фкаюдролвапжФюлоажожыдва" - только вот как так сделать?
Цитата
Вот только в чем же мучение открыть другой поток и туда валить результат ???

Я пытаюсь сделать так чтобы файл переделался, без
указания файла выхода.

9 Fantasist - мой код к примеру
Код

// здесь открывается файл для ввода и вывода..
// далее
while(!io.eof()){
io.get(ch);
int start=io.tellg();
// далее алгоритм узнавания начала и конца повторяющихся символов
}
вот здесь и собака зарыта...
КАК ВЫРЕЗАТЬ ЛИШНЕЕ зная начало и конец того что хочу
удалить?

--------------------
Ищу 2 файлаowl.tchwindows.tch 
PM MAIL   Вверх
Fantasist
Дата 16.6.2005, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Знак

Тяжело тебя понять.

Цитата
КАК ВЫРЕЗАТЬ ЛИШНЕЕ зная начало и конец того что хочу


Откуда вырезать? Из потока ввода с клавиатуры? В него попадает все, что нажимает пользователь - тут тебе надо клавиатурный драйвер, либо перехватывать обработку нажатия клавиш. Не думаю, что тебе захочется этим заниматься.

Зачем вырезать, когда можно просто не записывать?

Это сообщение отредактировал(а) Fantasist - 16.6.2005, 00:37


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Знак
Дата 16.6.2005, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2005

Репутация: -5
Всего: нет



был поток "фкаюдролвапжФФФФФФФФФюлоажожыдва"

я при помощи
за раз прогона
Код

while(!io.eof()){
io.get(ch);
int start=io.tellg();
// далее алгоритм узнавания начала и конца повторяющихся символов
}


определяю начало повторов и конец строки повторов
при помощи start
так вот как за этот раз прогона мне умудрится
еще и выкинуть ненужные символы?

Игнорировать символы потока это как?
здесь я применял технику смещения на позицию начала при выводе в новый файл, только так я это вижу....

А вообще читай внимательней!
Это весьма глючно и криво выходит..

напиши как ты представляешь себе конструкцию предлагаемою тобой.
очень интересно.
при том что условий чё где удалять и вводить у меня поболее чем просто
замена пробелов на буку "А" к примеру.

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

--------------------
Ищу 2 файлаowl.tchwindows.tch 
PM MAIL   Вверх
vadims
Дата 16.6.2005, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 8.6.2005

Репутация: 2
Всего: 17



1. Записать 0 байт - имелось в виду записать байтов количеством ноль штук, а не нулевые коды

Повторюсь что с потоками это не делал, а конструкция

lseek( fil, newsize, 0 );
write( fil, "", 0 );

работает

2. ну что ты нашел за проблему

while( !eof )
{
ch = inp.get()
if ( символ нам нужен)
outp.put(ch);
}

пишу на псевдокоде, тк лень смотреть потоковые функции

Добавлено @ 07:32
Цитата
Я пытаюсь сделать так чтобы файл переделался, без
указания файла выхода


Да забыл сказать как решить эту "проблему"
Создаешь левый файл типа "@@&&!!&&.tmp",
пишешь результат туда, потом удаляешь старый(входной),
а 'левый' переименовываешь в него



--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
Знак
Дата 16.6.2005, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2005

Репутация: -5
Всего: нет



Цитата
2. ну что ты нашел за проблему

while( !eof ) // net imia potoka inp.
{
ch = inp.get()
if ( символ нам нужен) // ??????????????????????????????????????????
outp.put(ch);
}


Нуууууууу и как вы представляете себе словарь по определению
нужных символов? В ГИГАБАЙТАХ ? smile

Легче написать какие символы не нужны чем перечислять какие нужны! smile

У меня if как минимум 3 раза повторяеся ( для определения нужной строки ) а ты мне их в скобки поместить предлагаешь! if ( If (){};If (){};If (){}; ) {null} else {null}

Цитата
Добавлено @ 07:32

Цитата 
Я пытаюсь сделать так чтобы файл переделался, без
указания файла выхода



Да забыл сказать как решить эту "проблему"
Создаешь левый файл типа "@@&&!!&&.tmp",
пишешь результат туда, потом удаляешь старый(входной),
а 'левый' переименовываешь в него


Повтарюсь Я поначалу за один прогон все сделать хотел...
поэтому и споросил как укоротить поток?
Смещением криво выходит... А вот функция помоглабы...

Цитата
Знак

Тяжело тебя понять.


Цитата (Знак @ 15.6.2005, 21:19)
КАК ВЫРЕЗАТЬ ЛИШНЕЕ зная начало и конец того что хочу


Читай внимательней. ( Если вообще в С++ Borland 3.1 понимаешь! ) smile

smile smile smile smile



--------------------
Ищу 2 файлаowl.tchwindows.tch 
PM MAIL   Вверх
Знак
Дата 17.6.2005, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2005

Репутация: -5
Всего: нет



Люди вы Где?

кто знает ?
--------------------
Ищу 2 файлаowl.tchwindows.tch 
PM MAIL   Вверх
vadims
Дата 17.6.2005, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 8.6.2005

Репутация: 2
Всего: 17



1. Выше тебе была дана вся необходимая информация

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

хотя бы в лоб:

if ( символ ch не нужен )
; // ничего не делаем, потому-что символ не нужен
else
file.put(ch); // пишем нужный символ в выходной поток, потому- // символ нужен


а по хорошему есть такое понятие как законы Моргана

2. Прежде чем кого-то обвинять, что он читает невнимательно -
прочитал бы сам что ты пишешь - неграмотно и абсолютно невнятно

НИКТО ТЕБЕ НИЧЕГО НЕ ОБЯЗАН, в том числе и разбираться что ты
хотел сказать

3. Хочу тебя 'поблагодарить', что подсказал мне что я в примере забыл указать поток
Хотя стаж в программировании у меня больше 13 лет, меня это не обидело, а даже развеселило.

Но вот фраза:

"Читай внимательней. ( Если вообще в С++ Borland 3.1 понимаешь! ) "

обращенная к Fantasist меня возмутила до глубины души

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

б. указав на С++ Borland 3.1 ты пытался показать владение новейшими инструментами от Borland'а что-ли ???

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


Вообщем, уверен что ни один грамотный человек, увидев эту ветку не будет тебе помогать. Так что молись чтобы модератор не дал на нее ссылку как на то что не надо делать

Я дал тебе пару советов по твоей задаче (как мне кажется по сути)
и надеюсь что заслужил право дать один по жизни:
Извинись перед Fantasist и здесь и через личное сообщение(или email). Впрочем как знаешь - тебе жить




--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
Знак
Дата 17.6.2005, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 29.4.2005

Репутация: -5
Всего: нет



Это был ФЛЭЙМ??? или провакация?

Чел еслиб ты 13 лет програмировал тыб
не писал таких длинных и не относящихся
к вопросу сообщений, а КОДом С++ отвечал...

И тебя бы все поняли ....
А когда ты даже поток на eof() .... забываешь написать
ты уж поясняй .... че это .... за eof()....
и не надейся что тебя будут понимаь одноЗНАЧНО... _))

В твой профайл глядеть не стану....
т.к. там правды и 1% нет .....

Цитата
1. Выше тебе была дана вся необходимая информация


Это только мне решать!!!

У вас 23 сообщения А форсу на все 2222 месседжеф
smile smile smile smile

Я попросил бы вас и вообще прежде чем что либо написать подумать!
о том стоит ли smile ..... см. в правила форума!

Цитата
Цитата
Я пытаюсь сделать так чтобы файл переделался, без
указания файла выхода


Да забыл сказать как решить эту "проблему"
Создаешь левый файл типа "@@&&!!&&.tmp",
пишешь результат туда, потом удаляешь старый(входной),
а 'левый' переименовываешь в него


В С++ 3.1 файл можно открывать одновременно
для чтения из него и записи в него. Что я и сделал!
fstraem io( "name", ios::in | ios::out | ios::binary );

Цитата
хотя бы в лоб:

if ( символ ch не нужен )
; // ничего не делаем, потому-что символ не нужен
else
file.put(ch); // пишем нужный символ в выходной поток, потому- // символ нужен


Это ты на С++ написал? компилятор С++ тебя непоймет!
И я непонимаю что сие значит..

--------------------
Ищу 2 файлаowl.tchwindows.tch 
PM MAIL   Вверх
Fantasist
Дата 17.6.2005, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата(vadims @ 17.6.2005, 12:24)
указав на С++ Borland 3.1 ты пытался показать владение новейшими инструментами от Borland'а что-ли


vadims smile Здесь, по-видимому, случай безнадежный.


Цитата
компилятор С++ тебя непоймет!
И я непонимаю что сие значит..


Вообще-то расчет был на то, что это будет читать человек, у которого есть голова для анализа подобного текста. Кто же знал, что есть такие интеллектуальные компиляторы, что уже могут на форуме общатся. Отсюда, наверное, такое неуверенное владения русским языком: все-таки компилятору человеческие языки должны доваться тяжело.

Цитата
Я попросил бы вас и вообще прежде чем что либо написать подумать!


Хорошо, разбирайся тогда сам.

Это сообщение отредактировал(а) Fantasist - 17.6.2005, 19:26


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Earnest
Дата 17.6.2005, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Знак,
"укорачивать" поток ввода идеологически неправильно. Потому что поток - это, по определнию, контейнер со строго последовательным доступом, причем одноразовым. Конечно, в основе потока может лежать контейнер с произвольным доступом, но далеко не всегда. Например, как уже говорилось выше, поток ввода с клавиатуры.
Так что задача просто неправильно поставлена. Надо либо копировать поток с критерием, либо прямо доступаться к нижележащему контейнеру (если таковой есть) и честно ковыряться в нем.


--------------------
...
PM   Вверх
vadims
Дата 17.6.2005, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 8.6.2005

Репутация: 2
Всего: 17




Опыт, это то, что мы получаем,
когда не получаем желаемого

Приношу Вам свои глубочайшие извинения !

Это был не ФЛЭЙМ и уж тем более не пров
Цитата
а
кация.
Просто мое скромное мнение. Надеюсь меня хоть немного оправдает, хотя бы то что я искренне хотел помочь и не сказал ни одного грубого слова.

Цитата
Чел еслиб ты 13 лет програмировал тыб
не писал таких длинных и не относящихся
к вопросу сообщений, а КОДом С++ отвечал...

И тебя бы все поняли ....
А когда ты даже поток на eof() .... забываешь написать
ты уж поясняй .... че это .... за eof()....
и не надейся что тебя будут понимаь одноЗНАЧНО... _))

В твой профайл глядеть не стану....
т.к. там правды и 1% нет .....

У вас 23 сообщения А форсу на все 2222 месседжеф


Я между прочим и не козырял своими заслугами и тем более своим профилем, тк
1. на этом форуме я около месяца
2. предыдущие год-два я вообще занимался вещами далекими от программирования (мне стыдно smile )

. . .
чтобы не разводить флейм не буду уж реагировать на все послулаты
. . .

Цитата
Я попросил бы вас и вообще прежде чем что либо написать подумать!
о том стоит ли  .....


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

Удачи и приятных выходных.





--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0916 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.