Ich habe eine Aufgabe, Elemente aus TXT-Datei [Direktzugriffsdatei] in .bin-Datei [feste Länge Record-Datei] (Hausaufgabe) zu kopieren. .txt-Datei enthält Zeichenfolgen. Jede Zeile hat ein Wort. Ich kam unten mit Code, aber ich bin mir nicht sicher, ob das ist, was benötigt wird und sogar leicht korrekt. Jede Hilfe wird nützlich sein! (Ich bin neu in C++)C++ Von Text-Datei zu Binär-Datei
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const int buffer_size = 30;
class Word{
char name[buffer_size];
public:
void setName() // Trying to get every word from a line
{
string STRING;
ifstream infile;
infile.open ("text.txt");
while(!infile.eof()) // To get you all the lines.
{
getline(infile,STRING); // Saves the line in STRING.
}
infile.close();
}
};
void write_record()
{
ofstream outFile;
outFile.open("binFILE.bin", ios::binary | ios::app);
Word obj;
obj.setName();
outFile.write((char*)&obj, sizeof(obj));
outFile.close();
}
int main()
{
write_record();
return 0;
}
NEUER ANSATZ:
class Word
{
char name[buffer_size];
public:
Word(string = "");
void setName (string);
string getName() const;
};
void readWriteToFile(){
// Read .txt file content and write into .bin file
string temp;
Word object;
ofstream outFile("out.dat", ios::binary);
fstream fin ("text.txt", ios::in);
getline(fin, temp);
while(fin)
{
object.setName(temp);
outFile.write(reinterpret_cast< const char* >(&object),sizeof(Word));
getline(fin, temp);
}
fin.close();
outFile.close();
}
int main()
{
readWriteToFile();
return 0;
}
Word::Word(string nameValue)
{
setName(nameValue);
}
void Word::setName(string nameString)
{
// Max 30 char copy
const char *nameValue = nameString.data();
int len = strlen(nameValue);
len = (len < 31 ? len : 30);
strncpy(name, nameValue, len);
name[len] = '\0';
}
string Word::getName() const
{
Rückkehr Name; }
Vielleicht interessiert es Sie zu lesen ["Warum wird iostream :: eof innerhalb einer Schleife als falsch angesehen?"] (Http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop - Bedingung - als falsch angesehen. –
Vorschlag: Wenn Sie 'std :: string' an dieser Stelle anstelle dessen verwenden dürfen:' char name [buffer_size]; 'do it. Rette dir viel Schmerz. Ja. Viel Schmerz. – user4581301
@JoachimPileborg Danke für den Rat. Ich bin immer noch auf der Suche nach der Antwort auf meine Frage! Lassen Sie mich wissen, wenn Sie irgendeine Idee haben :) – Maartin1996