Работа с файлами прямого доступа в C ++
Я чрезвычайно новичок в C ++ (и вообще программировании) и работаю над проектом, который поставил меня в тупик (нетрудно это сделать, ха). Проект включает в себя файлы прямого доступа. Мы должны создать файл, состоящий из серии записей деталей. Вот некоторые характеристики:
Должен содержать запись заголовка (заполнено 24 байта) с указанием количества допустимых элементов.
Каждая запись данных (длиной 24 байта) будет содержать номер запаса (не более 4 цифр), описание (не более 8 символов), счетчик (не более 4 цифр) и индикатор «тестовой части» (не более 4 цифр => -1). - конец файла).
Этот файл первоначально будет содержать 20 пустых (фиктивных) записей и будет создан последовательно.
После того, как файл будет создан, будет доступен последовательный текстовый файл обновления на основе номеров запасов, и новые записи будут вставлены в файл.
После завершения обновления действительные записи деталей будут напечатаны в порядке, начиная с записи запаса «1».
Обновление путем чтения текстового файла обновления (prog4.dat) и поиска позиции файла на основе номера запаса (не забудьте запись заголовка)
Например:
Initial (empty)
Input (updates)
1 widgits 25 3
6 gidgits 12 8
8 kidgits 6 -1
3 didgits 11 6
Output
1 widgits 25
3 didgits 11
6 gidgits 12
8 kidgits 6
Я абсолютно ничего не знаю о файлах Direct Access, поэтому просматривал пару разных ссылок, которые я нашел в Google (http://cee-ux49.cee.illinois.edu/cee490/public_html/pdfs_vgs/aL23_Direct_Access_Files.pdf , а такжеhttp://www.learncpp.com/cpp-tutorial/137-random-file-io/ в частности), но я не могу понять, как заставить это работать для этой конкретной программы.
Я не слишком много сделал для кода, так как, как я уже сказал, это поставило меня в тупик, и то, что у меня есть, основано главным образом на этой первой ссылке, поэтому я не знаю, насколько это правильно (не знаю, какой размер дать вектор, так как я не совсем уверен, что это будет в моей конкретной проблеме (может быть, массив деталей?)), но вот то, что я смог придумать.
#include <iostream>
#include <string>
#include <fstream>
#include <stream>
using namespace std;
class records {
public:
int getStckNumber() {
return stockNumber;
}
void setStockNumber(int stockNum) {
stockNumber = stockNum;
}
string getItemDespcription() {
return itemDescription;
}
void setItemDespcription(string itemDescrip) {
itemDescription = itemDescrip;
}
int getItemAmount() {
return itemAmount;
}
void setItemAmount(int itemAmt) {
itemAmount = itemAmt;
}
int getNext() {
return next;
}
void setNext(int nxt) {
next = nxt;
}
private:
int stockNumber;
string itemDescription;
int itemAmount;
int next;
int recNum;
}
int main() {
int stockNumber;
string itemDescription;
int itemAmount;
int next;
int recNum;
int recSize = sizeof(int) + sizeof(string) + sizeof(int) + sizeof(int) + sizeof(int);
istream updateFile;
updateFile.open("prog4.dat");
if(!updateFile) {
cerr << "Open Failure" << endl;
exit(1);
}
}
Вот файл, который я буду использовать для обновлений:
10 zidgits 17 -1
14 lidgits 2 7
6 gidgits 12 8
1 bidgits 25 3
16 widgits 9 10
7 midgits 0 2
3 didgits 11 6
5 tidgits 5 16
2 pidgits 7 5
8 kidgits 6 14
Вот некоторые конкретные вопросы, которые у меня есть:
Как мне сохранить информацию из updateFile в переменных, которые будут записаны в выходной файл (еще не был создан)?
Как мне заставить его записывать данные в правильном порядке, поскольку они основаны на последнем числе в каждой строке в файле updateFile.
Например, выходной файл должен начинаться с наименьшего stockNumber, равного 1, поэтому, исходя из этого файла, элемент с stockNumber 1 - это ставки. Затем файл должен посмотреть на последнее число в этой строке (3) и записать информацию для элемента с этим stockNumber (didgits) и так далее.
Это основные вопросы, которые возникают у меня прямо сейчас, но я уверен, что больше будет всплывать по мере этого. Любая помощь будет с благодарностью. Кроме того, это должно произойти примерно через 5 часов, поэтому я стараюсь как можно ближе придерживаться кода, который у меня уже есть (я знаю, что гораздо больше будет добавлено, конечно), если это вообще возможно.