Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Чтение данных из текстового файла


Автор: Father 23.8.2009, 22:29
Добро время суток !!!
Есть небольшая проблема. Ее суть следующая:
Прочитать данные из текстового файла, и вывести данные в переменную, НО перед каждой новой строкой надо вставить 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)


Автор: Ипатьев 23.8.2009, 22:43
Неужели никаких идей не возникает?
ни по поводу функции printf, ни по поводу ее аргументов? даже догадок?

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

Автор: andrew_121 24.8.2009, 00:10
http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

Автор: shuttle 24.8.2009, 08:11
Прочитать данные из текстового файла, и вывести данные в переменную. Может лучше в массив переменных, вот в массив(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));

Автор: azesmcar 24.8.2009, 08:31
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 ссылки прислал.

Автор: shuttle 24.8.2009, 09:13
всегда использовал fopen, что же тогда лучше вместо него использовать. 

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

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


Автор: azesmcar 24.8.2009, 09:22
Цитата(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;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)