1

クラスを使用して単純な家系図を作成しています。各人には ID があり、1 つ以上の関係を持つことができ、各関係にも ID があります。クラス メソッドを使用してツリーをインポートできるようにするために、このファイルをインポートしようとしています。

9
Charless 
0 
F
2 5
Dianaaaa 
0 
M
1
William 
1 
M
6 
Harry 
1 
M
-1 
... 

コンテキストによっては、テキスト ファイルには、ツリー内の人数、名前、関係番号 X の息子、性別、およびこの人物が関係を持っている人物の ID が表示されます。縁がない場合は「-1」が表示されます。クラスメソッドを介して人または関係を追加すると、ID が自動的にインクリメントされます。ファイルをインポートするには、次のようにしています。

ifstream f2;
f2.open("databasev2.txt");
string name; char gender;
int personrelationshipid; int sonofrelationshipid;
int numberOfPeople;
vector<int>relationships;
f2 >> numberOfPeople;
if (f2.is_open())
{ 
while (f2 >> name >> sonofrelationshipid >> gender )
{

    while (f2 >> personrelationshipid)
    {
        relationships.push_back(personrelationshipid);
        f2.ignore(0, ' '); 
    }
//...do something with the variables

私の現在の問題は、最初の反復後にループが停止することです。2番目の名前「Dianaaa」が文字列ではなくなったことを考慮しているかどうかはわかりません...現在、「9」、「Charless」、「0」、「F」、「2」、および「 5" にして、それらをベクターに挿入すると、停止します。関係が 1 つしかない場合、これは発生しません (つまり、5 つを削除した場合)

さらに、それらの間にスペースを含む名前を追加したいと思います-これを行うには、文字列を作成して f2.getline(name,string) を使用し、バッファをクリアして改行文字を削除するだけでよいと思います。次の行を読むのに苦労していますよね?

ブースト/JSON を使用して情報をシリアル化することはできません。これは手動で行う必要があるため、「車輪の再発明」で助けていただければ幸いです。ただし、区切り文字を追加して、必要に応じてファイルを編集できます。

前もって感謝します

4

2 に答える 2