2012-04-06 3 views
0
struct GPattern() { 
    int gid; 
    .... 
} 
class Example() { 
public: 
    void run(string _filename, unsigned int _minsup); 
    void PrintGPattern(GPattern&, unsigned int sup); 
    .... 
}; 

Eample::run(string filename, unsigned int minsup) { 
    for(...) { // some condition 
     // generate one GPattern, and i want to ouput it 
     PrintGPattern(gp, sup); 
    } 
} 

Example::PrintGPattern(GPattern& gp, unsigned int sup) { 
    // I want to ouput each GPattern to a .txt file 
} 

run используется для генерации GPattern соответственно.Как правильно выводить данные в файл?

То, что я хочу вывести в файл, - это некоторые тексты, которые восстанавливают оригинал GPattern.

Я не могу хранить все GPattern заранее и выводить все из них. Я должен вывести один GPattern в файл, когда я его создаю, но я не знаю, как его реализовать.

Я попытался объявить ofstream outGPatter("pattern.txt") в классе Example, но это не имеет смысла ...

+0

Я не хочу, чтобы заменить оригинал 'GPattern' в файле .txt – LoveTW

+0

Я вижу много отверстий в вашем вопросе. Думаю, у меня есть ответ для вас, но я недостаточно уверен в этих дырах. – Alexander

+0

Можете ли вы рассказать мне свою мысль? Спасибо :) – LoveTW

ответ

1

Ну, ofstream правильный путь:

Example::PrintGPattern(GPattern& gp, unsigned int sup) { 
    ofstream outGPattern("pattern.txt") 

    outGPattern << gp.gid; << " " << gp.anotherGid << " " .... 

    outGPattern.close() 
} 

Вы смотрели на правильный место для pattern.txt? Он должен либо находиться в папке, где находится ваш .exe, либо в папке, где находятся все ваши файлы .h и .cpp (по крайней мере для VS).

Если вы хотите, чтобы написать все шаблоны в тот же файл, то вам необходимо убедиться, что вы добавляете (а не переписать) pattern.txt

ofstream outGPattern («pattern.txt», ИОС :: app)

Итак, вы можете сначала сделать из потока без ios :: app (очистить текстовый файл) в начале вашей программы. Затем вы создаете все остальные потоки с помощью ios :: app для добавления нового текста вместо его записи.

В качестве альтернативы вы можете сделать из потока переменную-член примера. Затем вы строите его только один раз.

+0

Но в вашем методе исходные данные будут заменены, поэтому я могу получить только последний файл GPattern. – LoveTW

+0

Вам нужно использовать приложение ios ::, если вы не хотите его заменять. Редактирование. – s3rius

+0

Это работа !!! Спасибо за ваш ответ! – LoveTW

1

Я думаю, что вы можете использовать режим добавления, например:

ofstream outGPattern; 
outGPattern.open("GPattern.txt", ios::app); 
+0

Спасибо за ваш ответ! – LoveTW

1

То, как я понимаю, вы хотите добавить информацию о нескольких GPattern и вам просто нужно установить режим ввода/вывода ios::app в конструкторе.

struct GPattern { 
    int gid; 
    friend ostream& operator <<(ostream& o, GPattern gp) { 
    return o << "(gid=" << gp.gid << ")"; 
    } 
    ... 
} 

Example::PrintGPattern(GPattern& gp, unsigned int sup) { 
    ofstream fout("pattern.txt", ios::app) 
    fout << gp << endl; 
    fout.close() 
} 
+0

Спасибо за ваш ответ !!! Лучший:) – LoveTW