Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: cp58
Дата сообщения: 12.03.2012 20:17
TeXpert

Цитата:
А вот представьте, знаю

И про LRU наверно знаете...

Цитата:
Ну-ну, я посмотрю на эти манипуляции, когда файл огромный.

bzip2,gz,lzma. Cжать можно сколько угодно, возможность задать размер используемой памяти(хоть 64 мегабайта), вопросы?

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

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

Цитата:
В твоем распоряжении --- массив байт, с которым, кстати, ты можешь работать с функциями типа str*

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

Добавлено:
kotlomoy

Цитата:
Как работает delete я представляю. Но чтобы компилятор на этапе сборки проверял аргумент delete'а на корректность и выдавал ошибку компиляции еще до запуска программы - не представляю.

gcc

Код: int main() {
char buff[3000];
delete buff;
}
Автор: TeXpert
Дата сообщения: 12.03.2012 20:35
cp58
Цитата:
bzip2,gz,lzma. Cжать можно сколько угодно
Какой смыфсл сжимать, если приходится работать с несжатым? Чтобы хранить? Вопрос-то относился не к трудностям хранения! Сам же понимаешь, лишние манипуляции со сжатием-расжатием --- бессмысленная трата ресурсов (а если, как писали на предыдущей странице, памяти мало?)
Цитата:
Буфер будет выделен единожды, по определенному адресу и заданного размера, затем в него лишь будут подгружаться данные из файла(размерности буфера)
Это и коню понятно. Я имею в виду --- при таком чтении всегда надо иметь в виду, что в конце буфера может находиться "обрезанная" строка, то есть подходит нам по критерию поиска, но считана не полностью. Вот из-за этого и лишние манипуляции
Цитата:
Вся эта канитель пошла из-за вопроса на предыдущей страницы и обычными функциями str* не воспользоваться, придется вначале удалить нули
Можно искать и по-другому
Автор: cp58
Дата сообщения: 12.03.2012 20:44
TeXpert

Цитата:
Какой смыфсл сжимать, если приходится работать с несжатым? Чтобы хранить? Вопрос-то относился не к трудностям хранения! Сам же понимаешь, лишние манипуляции со сжатием-расжатием --- бессмысленная трата ресурсов (а если, как писали на предыдущей странице, памяти мало?)

Это были приведены алгоритмы, которые работают с блоками(chunk) вместо отображения файла на память, что тут неясного? Никакого отношения к задаче по поиску не имеют.

Цитата:
Это и коню понятно. Я имею в виду --- при таком чтении всегда надо иметь в виду, что в конце буфера может находиться "обрезанная" строка, то есть подходит нам по критерию поиска, но считана не полностью. Вот из-за этого и лишние манипуляции

А человек на что? правильно составить поиск.

Цитата:
Можно искать и по-другому

Регулярными выражениями? Как? Если там нули и просто обрвется на конце строки?

P.S. Предлагаю закрыть разговор, он бессмысленный, так как я уже все сказал по этому поводу.
Автор: kotlomoy
Дата сообщения: 12.03.2012 21:06
cp58

Цитата:
main.c:3:9: warning: deleting array ‘char buff [3000]’ [enabled by default]

enabled то он enabled, только сборке варнинг никак не мешает, в чем и был вопрос, как я понимаю ("как это вообще собралось?"). Разве только задрать уровень варнингов, но кому это надо? Надо проверять варнинги после сборки.
А у товарища gygant'a такое же предупреждение наверняка вылезло (хотя кто его знает, этот Builder), а он не обращает внимания на предупреждения, что есть плохо
Автор: TeXpert
Дата сообщения: 12.03.2012 21:08
cp58
Цитата:
Это были приведены алгоритмы, которые работают с блоками(chunk) вместо отображения файла на память, что тут неясного? Никакого отношения к задаче по поиску не имеют
Да, только сжати-то причём?) Уж в памяти-то в при поиске они ни к чему
Цитата:
А человек на что? правильно составить поиск
Так и я о чем и говорил --- все эти манипуляции можно ведь исключить, не беспокоясь, обрежется ли искомая "строка". А с буфером всякий раз надо выправлять, с какой позиции начать считывать, с учётом возможных обрезок
Цитата:
Регулярными выражениями? Как?
Да масса способов
Цитата:
Если там нули и просто обрвется на конце строки?
Да хотя бы так: считываешь до следующего нуля, дальше подряд идущие нули пропускаешь, заново так же считываешь до следующего нуля. К считанным строкам уже можешь применить регулярные выражения --- я не знаю, что точно ищется. Про какой конец строки ты спрашиваешь, мне непонятно, мы считываем из массива байт, и никаких буферов!


Цитата:
P.S. Предлагаю закрыть разговор, он бессмысленный, так как я уже все сказал по этому поводу
Согласен
Автор: cp58
Дата сообщения: 13.03.2012 11:17
kotlomoy

Цитата:
enabled то он enabled, только сборке варнинг никак не мешает,

На gcc есть -Werror, после чего проект не соберется хотя бы с одной ошибкой.

Цитата:
в чем и был вопрос, как я понимаю

Вопрос был в том, почему оператор delete позволяет удалять память, которая должна была быть выделена в стеке, попробуйте подать delete невалидный адрес(Segmentation fault обеспечен).
Автор: kenny5705
Дата сообщения: 14.03.2012 18:52
есть число типа int
и строка типа char

как преобразовать это число в строку?

потом еще нужно дописать это число в конец строки типа TCHAR но с этим я думаю справлюсь...
и может кто знает чем отличается тип TCHAR от простого char?
Автор: akaGM
Дата сообщения: 14.03.2012 19:02
ну, например, так:
sprintf(str, "%d", num);

или так:
itoa(num, str, 10);
Автор: karakurt2
Дата сообщения: 14.03.2012 19:04
std::string stringize(int x)
{
std::ostringstream out;
out << x << std::ends;
return out.str();
}
Автор: kenny5705
Дата сообщения: 14.03.2012 19:09
akaGM
спасибо, сделал так
itoa(num, str, 10);


а "10" что означает? то что числа могут быть с минусом? а если они неотрицательные?
или пофиг так оставить?
Автор: akaGM
Дата сообщения: 14.03.2012 19:12
kenny5705
а в хелпе трудно посмотреть?
10 -- основание, можешь в двоичном, восмиричном и в 16- счислении
Автор: kenny5705
Дата сообщения: 14.03.2012 19:19

Цитата:
а в хелпе трудно посмотреть?

не трудно, просто если есть знающие быстро реагирующие люди, почему бы и не спросить
Автор: akaGM
Дата сообщения: 14.03.2012 19:22
разврат...
Автор: kotlomoy
Дата сообщения: 14.03.2012 19:37
может общения не хватает человеку, а вы накинулись :/
Автор: akaGM
Дата сообщения: 14.03.2012 19:57
может...
а все одноклассники вконтакте с дельфями...
Автор: kenny5705
Дата сообщения: 14.03.2012 20:38

Цитата:
может...
а все одноклассники вконтакте с дельфями...

если бы... Turbo Pascal, и не дальше одномерных массивов...
Автор: Red Planet
Дата сообщения: 17.03.2012 11:53
Добрый день! Не пойму, почему введение функции getline становится причиной того, что запись в файл не идет. Если getline убрать, то все нормально.


Код: #include <vcl>
#include <fstream>
#include <iostream>
#include <string>
#pragma hdrstop

using namespace std;


#pragma argsused // No warning if function args are not in use.
// But there is no warning while compiling project. Why?
int _tmain(int argc, _TCHAR* argv[]) {

    fstream fs;
    fs.open("test.txt", ios_base::in | ios_base::out | ios_base::app);
    string curr;
    getline(fs, curr);
    cout << curr << endl;
    int s = 1, t = 2;
    fs << s << t << "\n\n"; // It is failed every time

    fs.close();
    system("pause");
}
Автор: cp58
Дата сообщения: 17.03.2012 13:09
Red Planet


Цитата:
fs.open("test.txt", ios_base::in | ios_base::out | ios_base::app);

По-моему они не совместимы.


Цитата:
запись в файл


Код: fs.seekp(0L,ios::end);
fs << s << t << "\n\n"
Автор: Red Planet
Дата сообщения: 17.03.2012 13:33

Цитата:
запись в файл
fs.seekp(0L,ios::end);
fs << s << t << "\n\n"


cp58, если файл был открыт на чтение (ios_base::in), то как его переключить на запись?

Автор: akaGM
Дата сообщения: 17.03.2012 13:37
cp58
а разве при
fs.open("test.txt", ios_base::app)
указатель не помещается в конец файла?

Red Planet
попробуй перед закрытием

fs.flush();
fs.close();

Автор: cp58
Дата сообщения: 17.03.2012 14:14
akaGM
Помещает, но вопрос же был в том, как записать данные в конец файла, открытого для чтения и записи.
Red Planet
А почему бы не открыть сразу на чтение и запись?

Добавлено:
akaGM
*Помещает при записи в файл.
Автор: Red Planet
Дата сообщения: 17.03.2012 14:44
Функция flush() не понадобилась. Прочитал о ней.

"Она принудительно записывает содержимое буфера, связанного с потоком, на устройство вывода," - пишет Герберт Шилдт.

Я правильно понял? Устройство вывода здесь - файл, в который идет запись.

А это на самом деле запись в некий низкоуровневый буфер (basic_filebuf или нет?).

Код: somefile << "Lorem ipsum..."
Автор: akaGM
Дата сообщения: 17.03.2012 15:22
Red Planet

Цитата:
Нужно было записать в файл определенную первую строку.

:)
а что, он у тебя до этого пустой был? и ты его читал?


Цитата:
Она принудительно записывает содержимое буфера, связанного с потоком, на устройство вывода,
да, просто разные системы в/в по-разному оптимизируют этот ввод/вывод + сюда влезает ещё и ОСь...
так что в некоторых случаях с чтением/записью в один и тот же файл возникают проблемы и иногда помогает только принудительный сброс в файл буфера...
Автор: Red Planet
Дата сообщения: 17.03.2012 16:42

Цитата:
а что, он у тебя до этого пустой был? и ты его читал?


akaGM, это часть из одной задачи. Если первая строка равна заданной, то дальше происходит запись данных в конец, но неизвестно, существует ли файл, если существует, правильная ли первая строка.


Цитата:
да, просто разные системы в/в по-разному оптимизируют этот ввод/вывод + сюда влезает ещё и ОСь...
так что в некоторых случаях с чтением/записью в один и тот же файл возникают проблемы и иногда помогает только принудительный сброс в файл буфера...


Спасибо.

Теперь хочу понять, что значит запись


Код: ios_base::in | ios_base::out | ios_base::append
Автор: kenny5705
Дата сообщения: 18.03.2012 10:03
Red Planet

Цитата:
Вопрос. Что, можно открыть файл и на чтение, и на запись одновременно? Да вроде бы нет, не работает. Чтение есть, а записи нет.

можно средствами WinAPI сделать, там, насколько мне известно, можно открыть файл и на запись и на чтение...
вот что-то типа инструкции: http://zetblog.ru/programming/200902/winapi-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D0%BC%D0%B8-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8/
а вот первоисточник: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx
если попросишь, могу конкретный пример привести

All
Может кто знает...
Как средствами Windws (WinAPI) "передернуть" флешку?
А то тут один скриптик написал, и для того чтобы он работал нужно реконнектить флешку, а хотелось бы чтоб автоматом работало...

Добавлено:
но походу для начала нужно получить различные коды устройства(HWID, PID, VID, .. ), если знаете как их получить, тоже буду рад за информацию...
Автор: Molniev
Дата сообщения: 18.03.2012 11:34
kenny5705
Именно флешку? Может том?
Volume Management смотреть DeleteVolumeMountPoint, GetVolumeNameForVolumeMountPoint, SetVolumeMountPoint.
Автор: kenny5705
Дата сообщения: 18.03.2012 12:26

Цитата:
Именно флешку? Может том?

может и том, но не уверен...
только тогда придется достать GUID тома (volume GUID paths), который пока тоже не знаю как получить, зная букву логического диска(drive letter, "C:\"), и имя устройства ("\\.\PhysicalDrive0") ...
Автор: Molniev
Дата сообщения: 18.03.2012 13:30
kenny5705

Цитата:
только тогда придется достать GUID тома (volume GUID paths), который пока тоже не знаю как получить, зная букву логического диска(drive letter, "C:\"),

А GetVolumeNameForVolumeMountPoint чем тогда занимается?
Автор: V0lt
Дата сообщения: 23.03.2012 20:07
Какие типы предпочтительнее использовать?
int8_t, int16_t, int32_t, int64_t и uint8_t, uint16_t, uint32_t, uint64_t (stdint.h)
или
INT8, INT16, INT32, INT64, UINT8, UINT16, UINT32, UINT64 (intsafe.h, BaseTsd.h)?

Пищу под винду.
Автор: akaGM
Дата сообщения: 23.03.2012 21:07
V0lt
лучше ориентироваться на разрядность платформы: 32 для 32- платформы и 64 соответственно...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.