私はやや弱い/漠然としたデータベースを作成しています(私の経験は非常に少ないので、私のコードの混乱を許してください)。このために、コンソールプログラムが起動するたびに、データベース(userlist.txtにコピー)が既に作成されているかどうかを確認するチェックを作成します。作成されていない場合は、データベースが存在する場合は、データベースをすべてにコピーする必要があります。 'vector users'(これは構造体です)クラス'userbase'内にあり、すべてのユーザー情報が含まれます。
私のuserstats構造体は次のようになります。
enum securityLevel {user, moderator, admin};
struct userstats
{
string ID;
string name;
string password;
securityLevel secLev;
};
このコードには、テキストファイルからのこのすべての情報が含まれます。
int main()
{
Userbase userbase; // Class to contain userinformation during runtime.
ifstream inFile;
inFile.open("userlist.txt");
if(inFile.good())
{
// ADD DATE OF MODIFICATION
cout << "USERLIST FOUND, READING USERS.\n";
userstats tempBuffer;
int userCount = -1;
int overCount = 0;
while(!inFile.eof())
{
string buffer;
getline(inFile, buffer);
if (buffer == "ID:")
{
userCount++;
if (userCount > overCount)
{
userbase.users.push_back(tempBuffer);
overCount++;
}
tempBuffer.ID = buffer;
cout << "ID"; // Just to see if works
}
else if (buffer == "name:")
{
cout << "name"; // Just to see if works
tempBuffer.name = buffer;
}
else if (buffer == "password:")
{
cout << "password"; // Just to see if works
tempBuffer.password = buffer;
}
}
if (userCount == 0)
{
userbase.users.push_back(tempBuffer);
}
inFile.close();
}
...
私がやろうとしているのは、テキストファイルのすべての行を読んで分析することです。userlist.txtの例は、次のようになります。
created: Sun Apr 15 22:19:44 2012
mod_date: Sun Apr 15 22:19:44 2012
ID:1d
name:admin
password:Admin1
security level:2
(私はまだプログラムに「セキュリティレベル」を読み取っていないことを認識しています)
編集:リスト内の前のユーザーの「securitylevel:x」行をたどるだけのユーザーが増える可能性もあります。
ここで、プログラムが「ID:1d」という行を読み取った場合、これを構造体にコピーし、最後にすべてをベクターuserbase.users[i]に配置します。ただし、これは機能していないようです。どのifステートメントにも追いついていないようです。私は以前にこの種のプログラムを動作させることができたので、私が間違っていることを非常に混乱させています。私は本当にこれでいくつかの助けを使うことができました。コードに対する他の種類の批判は大歓迎です。
よろしく、ミケル