好吧所以这是我目前用于删除功能的代码。
void classSchedule::deleteEntry(classSchedule schedule[], int numElems)
{
string entryToDelete;
cout << endl << "Enter the Teacher's Last Name of the Entry you want to delete: ";
cin >> entryToDelete;
int i, recordToDelete = -1;
for (i = 0; i < numElems; i++)
{
if (schedule[i].teacherLastName == entryToDelete)
recordToDelete = i;
}
if (recordToDelete != -1)
{
}
}
它基本上是这样的:我有一个名为schedule []的类数组,每个对象都有以下成员:class department,class number,credit hours,teacher name,teacher first name,room number and current GPA。我通过向他们询问他们想要删除的教师姓氏来开始我的职能,因为所有其他人都可以重复。我在我的对象上搜索了这个姓氏。
我想知道如何从文件中删除该对象的整个实例。
我是否可以用它前面或后面的物体覆盖它。
即。他们想要删除10个实例中的时间表[4]我可以用[5]覆盖[4],[5]用[6]覆盖等等吗?
编辑:
这是正在读取的文件写入(classes.txt):
ENG 112 3 Tetlof S S062 3.1
CST 280 3 Klingler T K114 3.4
LWA 220 2 Wesolak J M121 2.1
POL 103 4 Fortin B J122 4.1
ENG 111 2 Harood J K131 3.1
EDIT2:
void classSchedule::outputToFile(classSchedule schedule[], int& numElems)
{
ofstream fileOut;
fileOut.open("classes.txt", ios::out | ios::app);
fileOut << schedule[numElems - 1].classDepartment
<< " " << schedule[numElems - 1].creditHours
<< " " << schedule[numElems - 1].teacherLastName
<< " " << schedule[numElems - 1].teacherFirstName
<< " " << schedule[numElems - 1].roomWingAndNumber
<< " " << schedule[numElems - 1].currentGPA;
fileOut.close();
}
答案 0 :(得分:1)
您有三种选择:1)将修改后的数据输出到新文件;或2)将记录标记为已删除,但可以重复使用;或者3)将数据“向上”移动到未使用的插槽(如数组)。
也许您应该使用数据库。
许多应用程序将原始数据和修改后的数据写入新文件。要删除的数据不会写入文件。这是最简单的解决方案。
如果您的文件具有固定大小的记录,您可以将已删除的记录标记为可用,以便可以再次使用它。这可能需要在记录中添加一个标志,指示它是死还是活。
一种丑陋的方法是使用前面的数据覆盖已删除的数据。例如,如果我有一个包含3个句子的文件并且我删除了句子2,我将阅读句子3并将其写入句子2开始的位置。