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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение данных из текстового файла 
:(
    Опции темы
Father
Дата 23.8.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добро время суток !!!
Есть небольшая проблема. Ее суть следующая:
Прочитать данные из текстового файла, и вывести данные в переменную, НО перед каждой новой строкой надо вставить 4 пробела...
С первой частью справился, а вот со второй (4 пробела) немогу (((( Выручайте новичка.

PS: Пишу на чистом с под Linux

Код

   FILE *fd;
   char *buf;
            int in_len;


    fd = fopen(argv[1], "rb");
    if (!fd){
        printf("can't open file !!!\n");
        return 3;
    }


    fseek(fd, 0, SEEK_END); 
    in_len = ftell(fd);
    fseek(fd, 0, SEEK_SET);

    buf = (char*) malloc(in_len);
    fread(buf, in_len, 1, fd);

    printf("%s", buf);

    fclose(fd);
    free(buf)



Это сообщение отредактировал(а) Father - 23.8.2009, 22:30
PM MAIL   Вверх
Ипатьев
Дата 23.8.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

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



Неужели никаких идей не возникает?
ни по поводу функции printf, ни по поводу ее аргументов? даже догадок?
PM MAIL   Вверх
Father
Дата 23.8.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



printf - в принципе ненужен, задача скопировать в buf.
и в файле несколько строк, а не одна, если вы имели ввиду printf("    %s",buf)

Это сообщение отредактировал(а) Father - 23.8.2009, 22:59
PM MAIL   Вверх
andrew_121
Дата 24.8.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/

Это сообщение отредактировал(а) andrew_121 - 24.8.2009, 00:14


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
shuttle
Дата 24.8.2009, 08:11 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Прочитать данные из текстового файла, и вывести данные в переменную. Может лучше в массив переменных, вот в массив(vector) string-ов

Код

FILE* pFile;

    pFile=fopen("argv[1]","r");
    char pc[100];
    
    vector<string> vec;
    if(pFile)
    {
        while(!feof(pFile))
        {
            fgets(pc,100,pFile);
            vec.push_back(pc);
        }
    }

    copy(vec.begin(),vec.end(),ostream_iterator<string>(cout));
    
    for(int i=0;i<vec.size();i++)
        vec[i]="    "+vec[i];      //добавление пробелов

    copy(vec.begin(),vec.end(),ostream_iterator<string>(cout));

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


uploading...
****


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

Репутация: 52
Всего: 211



shuttle

1. То, что автор пишет на чистом C (без плюсов) ты не заметил?
2. Если уж писать на C++, то зачем нужно использование fopen, fgets? std::ifstream уже не в моде?
3. pFile=fopen("argv[1]","r");??? может argv[1] не должен быть в ковычках?
4. for(int i=0;i<vec.size();i++)?? а итераторы для чего нужны? а алгоритмы?

Father
Читай файл построчно и добавляй в переменную, ну и пробелы заодно добавляй.
Посмотри описание fgets, andrew_121 ссылки прислал.

PM   Вверх
shuttle
Дата 24.8.2009, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



всегда использовал fopen, что же тогда лучше вместо него использовать. 

А здесь я не заметил что argv[1] в кавычки записал.
Код

pFile=fopen("argv[1]","r");


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


uploading...
****


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

Репутация: 52
Всего: 211



Цитата(shuttle @  24.8.2009,  09:13 Найти цитируемый пост)
всегда использовал fopen, что же тогда лучше вместо него использовать. 

Я написал, потоки (std::fstream). fopen - это Си, fstream - C++.  smile 
На C++ это было бы что-то вроде этого
Код

std::ifstream file("Test.txt");
std::string line;
std::string text;
while (std::getline(file, line))
{
    text.append("    " + line + "\n");
}
std::cout << text;


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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