Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

13.05.2010, 05:16
|
|
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
Провел на форуме: 4761503
Репутация:
229
|
|
Как прочитать/вывести первую строку из файла на WINAPI?
(вариант fgets - не интересует)
Последний раз редактировалось wolmer; 13.05.2010 в 05:20..
|
|
|

13.05.2010, 09:26
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
rudvil
ну тут тока std::for_each, а для связывания проще и удобнее использовать http://www.rsdn.ru/article/cpp/boost.bind.xml
Последний раз редактировалось Ra$cal; 13.05.2010 в 09:45..
|
|
|

13.05.2010, 09:33
|
|
Участник форума
Регистрация: 18.07.2009
Сообщений: 272
Провел на форуме: 2083691
Репутация:
330
|
|
Сообщение от wolmer
Как прочитать/вывести первую строку из файла на WINAPI?
(вариант fgets - не интересует)
ReadFile() из windows.h
читaй покa нe встрeтишь пeрeвод строки.
|
|
|

13.05.2010, 10:10
|
|
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме: 2823587
Репутация:
106
|
|
Сообщение от Ins3t
ReadFile() из windows.h
читaй покa нe встрeтишь пeрeвод строки.
По моему лучше будет считать весь файл(часть его если он большой) в память и потом только разбить на строки.
|
|
|

13.05.2010, 15:58
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
Сообщение от Ra$cal
rudvil
ну тут тока std::for_each, а для связывания проще и удобнее использовать http://www.rsdn.ru/article/cpp/boost.bind.xml
Возникла проблема =/
Код:
#include <algorithm>
#include <functional>
#include <iostream>
#include <map>
#include <string>
#include <utility>
#include <boost/bind.hpp>
int main(int argc, char* argv[]) {
typedef std::map<std::string, std::pair<int, int> > map_type;
map_type files;
files["0.txt"] = std::make_pair(0, 7);
files["1.txt"] = std::make_pair(8, 41);
files["2.txt"] = std::make_pair(42, 50);
int num = 21;
map_type::const_iterator elem;
elem = std::find_if(
files.begin(),
files.end(),
boost::bind(
std::logical_and<bool>(),
boost::bind(
std::greater_equal<int>(),
boost::bind(
&map_type::value_type::second_type::first_type,
_1),
num),
boost::bind(
std::less_equal<int>(),
boost::bind(
&map_type::value_type::second_type::second_type,
_1),
num)));
if (elem != files.end())
std::cout << "Found in " + (*elem).first + "\n";
return 0;
}
Компилятор ругается
main.cpp:26: error: expected primary-expression before ',' token
main.cpp:32: error: expected primary-expression before ',' token
т.е. на это:
линия (26) &map_type::value_type::second_type::first_type,
и на это:
линия (32) &map_type::value_type::second_type::second_type ,
т.е. как это expected, если с примером который тут http://www.rsdn.ru/article/cpp/boost.bind.xml#EYVAE всё ок(компилирует без ошибок), а тут на тебе...
Последний раз редактировалось rudvil; 13.05.2010 в 16:04..
|
|
|

13.05.2010, 17:10
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
Я сделал его!!! 
Может кому понадобится, вот код - правда он стал, ммм... не таким понятным как тут
Код:
#include <algorithm>
#include <functional>
#include <iostream>
#include <map>
#include <string>
#include <utility>
#include <boost/bind.hpp>
int main(int argc, char* argv[]) {
typedef std::map<std::string, std::pair<int, int> > map_type;
map_type files;
files["0.txt"] = std::make_pair(0, 7);
files["1.txt"] = std::make_pair(8, 41);
files["2.txt"] = std::make_pair(42, 50);
int num = 21;
map_type::const_iterator elem;
elem = std::find_if(
files.begin(),
files.end(),
boost::bind(
std::logical_and<bool>(),
boost::bind(
std::less_equal<int>(),
boost::bind(
&map_type::value_type::second_type::first,
boost::bind(
&map_type::value_type::second,
_1)
),
num),
boost::bind(
std::greater_equal<int>(),
boost::bind(
&map_type::value_type::second_type::second,
boost::bind(
&map_type::value_type::second,
_1)
),
num)));
if (elem != files.end())
std::cout << "Found in " + (*elem).first + "\n";
return 0;
}
После выполнения мы получим следующее
, т.е. 21 находится между 8 и 41.
Последний раз редактировалось rudvil; 13.05.2010 в 17:15..
|
|
|

13.05.2010, 19:48
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
молодец =)
Если вдруг интересно зачем такой гемор:
1) У тебя крайний случай когда нет никаких методов, обычно более менее общую логику суют в классы, а дальше композиция получается проще.
2) Суть использования stl - например если решат наконец добавить распараллеливание независимых задач, то стл попадет под это первым со своим for_each, find, transform и всеми остальными алгоритмами. Будет на автопилоте при запуске решаться сколько ядер есть в распоряжении и параллелиться. Но пока это мечты мечты =\
3) С лямбда выражениями, которые в новом стандарте добавились, кодить юзая алгоритмы будет еще проще
|
|
|

14.05.2010, 21:31
|
|
Участник форума
Регистрация: 05.01.2009
Сообщений: 191
Провел на форуме: 3020589
Репутация:
240
|
|
Здравствуйте.
Подскажите пож-та что не так.
Решил разобратся с curl + с++
Нашел примеры - http://pblog.ru/?p=607
Там приводят листинг:
Код:
#include <stdio.h>
#include <curl/curl.h>
//главная функция
int main(void)
{
//уже знакомый объект CURL
CURL *curl;
//объект - результат вызова функции curl_easy_perform
CURLcode res;
//выполняем инициализацю
curl = curl_easy_init();
if(curl) { //проверяем
//задаем опцию - получить страницу по адресу http://google.com
curl_easy_setopt(curl, CURLOPT_URL, "google.com");
//указываем прокси сервер
curl_easy_setopt(curl, CURLOPT_PROXY, "proxy:8080");
//задаем опцию отображение заголовка страницы
curl_easy_setopt(curl, CURLOPT_HEADER, 1);
//вызываем функцию, выполняющюю все операции, заданные в опциях (получение страницы, передача данных и т.д.), результат - объект типа CURLcode
res = curl_easy_perform(curl);
//выполняем обязательное завершение сессии
curl_easy_cleanup(curl);
}
return 0;
}
При попытке компиляции пишет:
Код:
:~/cpp$ g++ -o curl curl.cpp
/tmp/ccUnjuIz.o: In function `main':
curl.cpp:(.text+0xa): undefined reference to `curl_easy_init'
curl.cpp:(.text+0x31): undefined reference to `curl_easy_setopt'
curl.cpp:(.text+0x4d): undefined reference to `curl_easy_setopt'
curl.cpp:(.text+0x69): undefined reference to `curl_easy_setopt'
curl.cpp:(.text+0x75): undefined reference to `curl_easy_perform'
curl.cpp:(.text+0x85): undefined reference to `curl_easy_cleanup'
collect2: ld returned 1 exit status
Что не так?
|
|
|

14.05.2010, 22:12
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
lib файл подключен? или какой там файл в никсах
|
|
|

14.05.2010, 22:24
|
|
Участник форума
Регистрация: 05.01.2009
Сообщений: 191
Провел на форуме: 3020589
Репутация:
240
|
|
А какой подключать то? Я думал что библиотеки curl/curl.h хватит
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|