2015-01-27 4 views
-2

Хорошо, вот код, который у меня есть для моей функции удаления.Удаление из файла C++

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) 
    { 

    } 

} 

По сути, как это: у меня есть массив классов, называются телепрограмма [] каждый объект имеет следующие элементы: отдел класса, номер класса, кредитные часы, учитель фамилию, учитель имя, номер число и текущий gpa. Я начал свою работу, попросив у них фамилию учителей, которую они хотят удалить, потому что все остальное может повториться. Я искал свой объект для этой фамилии.

Я хочу знать, как удалить весь экземпляр этого объекта из файла.

Возможно ли, чтобы я просто переписал его объектами впереди или позади него.

т. Е. Они хотят удалить расписание [4] из 10 экземпляров, я мог бы просто перезаписать [4] с помощью [5], [5] с [6] и так далее?

Edit:

Вот файл, который читается писал (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(); 
} 
+1

Если производительность не является проблемой, напишите все в файл, как будто вы создаете новый файл, но запись, которую вы хотите удалить из файла. –

+0

Я добавил файл в исходное сообщение – user2311215

+0

также добавил файл, который выводит новую запись в файл – user2311215

ответ

1

У вас есть три варианта: 1) Выход измененные данные в новый файл; или 2) Отметить записи как удаленные, но доступные для повторного использования; или 3) Переместите данные «вверх» в неиспользуемые слоты (например, массив).

Возможно, вы должны использовать базу данных.

Многие приложения записывают исходные и измененные данные в новый файл. Данные, которые должны быть удалены, не записываются в файл. Это самое простое решение.

Если ваш файл имеет записи фиксированного размера, вы можете пометить удаленную запись как доступную, чтобы ее можно было использовать снова. Это может потребовать добавления в запись флага, указывающего, является ли он мертвым или живым.

Уродливый метод заключается в том, чтобы перезаписать удаленные данные с данными, которые находятся перед ним. Например, если у меня есть файл, содержащий 3 предложения, и я удаляю предложение 2, я прочитаю предложение 3 и напишу его в позицию, где началось предложение 2.

+0

, поэтому для метода флага вы думали добавить другое значение в файл, который является либо истинным, либо ложным, и если его ложный вывод не выводится, если его истинный выход? – user2311215

+0

У вас есть флаг в записи, находящейся в файле. Если флаг имеет значение true, это действительная запись. Если флаг имеет значение false, игнорируйте запись, если вам не нужно повторно использовать пробел. Извините, но «вывод» неясен. –

+0

Я предлагаю вам просмотреть базы данных, особенно Sqlite, так как он небольшой, но он будет обрабатывать файлы ввода/вывода для вас. –

Смежные вопросы