HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 13.05.2010, 05:16
wolmer
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
С нами: 8947056

Репутация: 229
По умолчанию

Как прочитать/вывести первую строку из файла на WINAPI?
(вариант fgets - не интересует)

Последний раз редактировалось wolmer; 13.05.2010 в 05:20..
 
Ответить с цитированием

  #2  
Старый 13.05.2010, 09:33
Ins3t
Участник форума
Регистрация: 18.07.2009
Сообщений: 272
С нами: 8850336

Репутация: 330
По умолчанию

Цитата:
Сообщение от wolmer  
Как прочитать/вывести первую строку из файла на WINAPI?
(вариант fgets - не интересует)
ReadFile() из windows.h
читaй покa нe встрeтишь пeрeвод строки.
 
Ответить с цитированием

  #3  
Старый 13.05.2010, 10:10
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
С нами: 9989619

Репутация: 106
По умолчанию

Цитата:
Сообщение от Ins3t  
ReadFile() из windows.h
читaй покa нe встрeтишь пeрeвод строки.
По моему лучше будет считать весь файл(часть его если он большой) в память и потом только разбить на строки.
 
Ответить с цитированием

  #4  
Старый 13.05.2010, 09:26
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами: 10386906

Репутация: 599


По умолчанию

rudvil
ну тут тока std::for_each, а для связывания проще и удобнее использовать http://www.rsdn.ru/article/cpp/boost.bind.xml

Последний раз редактировалось Ra$cal; 13.05.2010 в 09:45..
 
Ответить с цитированием

  #5  
Старый 13.05.2010, 15:58
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
С нами: 9320830

Репутация: 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..
 
Ответить с цитированием

  #6  
Старый 13.05.2010, 17:10
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
С нами: 9320830

Репутация: 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;
}
После выполнения мы получим следующее
Цитата:
Found in 1.txt
, т.е. 21 находится между 8 и 41.

Последний раз редактировалось rudvil; 13.05.2010 в 17:15..
 
Ответить с цитированием

  #7  
Старый 13.05.2010, 19:48
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами: 10386906

Репутация: 599


По умолчанию

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

  #8  
Старый 14.05.2010, 21:31
M.W.N.N.
Участник форума
Регистрация: 05.01.2009
Сообщений: 191
С нами: 9129884

Репутация: 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
Что не так?
 
Ответить с цитированием

  #9  
Старый 14.05.2010, 22:12
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами: 10386906

Репутация: 599


По умолчанию

lib файл подключен? или какой там файл в никсах
 
Ответить с цитированием

  #10  
Старый 14.05.2010, 22:24
M.W.N.N.
Участник форума
Регистрация: 05.01.2009
Сообщений: 191
С нами: 9129884

Репутация: 240
По умолчанию

А какой подключать то? Я думал что библиотеки curl/curl.h хватит
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.