Как насчет моей проблемы, как указано в заголовке, я знаю, как создавать простые и двойные списки в С++, но я понятия не имею, как передавать информацию из текстового файла в простой список. У меня есть программа, построенная на С++ с индексами файлов, и моя программа делает все это:
- Добавлять
- Показывать
- Поиск
- Удалять
- Изменить
- показать индексы
Но единственная опция, которую мне не хватает, это Display Orderly . Для этого они просят меня использовать TDA, и я должен взять данные из текстового файла и добавить их в TDA, чтобы позже отсортировать и отобразить их. Мой проект обрабатывает 2 текстовых файла, поскольку он предназначен для индексов: один — Datos.txt (сохраняет всю информацию), а другой — Indice.txt (сохраняет индексы).
Данные, запрашиваемые при добавлении, следующие:
cout << "Codigo: ";
cin.getline(Dis.codigo,10);
cout << "Nombre: ";
cin.getline(Dis.nombre,30);
cout << "Cantante: ";
cin.getline(Dis.cantante,30);
cout << "Genero: ";
cin.getline(Dis.genero,20);
cout << "Precio: ";
fflush(stdin);
cin.getline(Dis.precio,10);
cout << "Discografia: ";
cin.getline(Dis.discografia,20);
cout << "Disco agregado correctamente" << endl;
system("pause");
ofstream a("datos.txt",ios::app);
ofstream b("indice.txt",ios::app);
a.write((char*)&Dis,sizeof(Dis));
a.seekp(0,ios::end);
Ind.pos=a.tellp()/sizeof(Dis);
strcpy(Ind.codigo,codigo);
b.write((char*)&Ind,sizeof(Ind));
b.close();
a.close();
Эти данные сохраняются в файле Data.txt , а код сохраняется в Index.txt вместе с позицией. Я надеюсь, что моя формулировка проблемы дает мне понять, что это только то, как добавить данные, которые находятся в .txt, в простой связанный список и отобразить его упорядоченным образом.
Я пытаюсь понять ситуацию.
Задание : Скопировать два текстовых файла в список дисков .
➢ Создание TDA или TAD (абстрактный тип данных)
Первым делом нужно создать структуру
Dis
(диск) таким образом.Примечание. Этот тип структуры не может быть в текстовом файле, так как a
string
является указателем на строку символов, которая имеет динамический размер. То есть все целые числа занимают 32 или 64 бита в зависимости от архитектуры, это всегда одно и то же число, а вот строка ,"Pedro"
не занимает столько же, сколько"Juan"
, первые 4 и вторые 5, и несмотря на это, оба типа строка, то вы не можете сделатьsizeof
.➢ Управление файлом
Для работы с файлами нужна стандартная библиотека
stdio
, онаmain
должна выглядеть так. Онstdlib
нужен время от времени, поэтому оставляем его, не обращая внимания на то, для чего он нужен.Для этого необходимо знать, как файлы обрабатываются в C , хотя это также работает и в C++ , так как это кумулятивный язык. Итак, я нашел следующую ссылку, посвященную этой теме:
Программирование на C — Работа с файлами — WikiBooks .
FILE
.Псевдокод:
➢ Откройте файл
Список параметров opentype для функции fopen :
В нашем случае мы собираемся использовать Non-Binary Read , то есть
"r"
, поскольку мы обрабатываем файлыtxt
(обычный текст), а не изображения или аудио.Код: это шаги 1 и 2 в одной строке.
➢ Прочитать файл
В нашем случае нас интересует
fgetc
, так как структураDis
не может прийти в файл.Код: это заставляет его читать по одному символу за раз.
➢ Закрыть файл
Код:
Мы уже видели основные операции с файловыми операциями. Теперь нам осталось подумать о том, как выгрузить его в структуру данных
Dis
.Поскольку вы не показали пример текстового файла того, как данные могут поступать с диска, я предполагаю, что он имеет следующий формат . Более того, я думаю, что таким образом не обязательно читать индексный файл , поэтому я не буду касаться этой темы.
Для этого необходимо учитывать два исключения: любой символ, кроме пробелов, (то есть ,
' '
)'\x20'
или разрыв строки ('\n
,\r
,\x0D
,\x0A
). Пробел означает следующее поле в структуре, разрыв строки, следующий диск.➢ Как читать файл в этом новом формате?
Код: мы берем предыдущий код о чтении символа и добавляем к нему кое-что.
Примечание: я оставляю некоторые вещи незавершенными, чтобы вы могли спокойно практиковаться, они не так уж и сложны.
➢ Организация структуры
В следующем примере я упорядочу диски по коду. Следует уточнить, что наиболее эффективным методом упорядочивания является тот, который допускает бинарный поиск, только он эффективнее и медленнее по сравнению с другим.
Примечание. Опять же, я бросю вам вызов этими маленькими деталями.