-
October 28th, 2003, 09:30 AM
#1
binary output with c++
I've just begun programming in c++ a couple of weeks ago, and i'm trying different things.
But I'm having problems getting a good output in the binary output files, when there is a binary and a non-binary input.
The programm stays in a loop when I execute it.
I don't understand why, so I could realy use some help.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
using namespace std;
struct klbstd
{
int klnr;
char klsrt[1];
char klnaam[25];
char kladr[25];
char klpstcd[6];
char klplts[15];
long klbnr;
long klgiro;
char mutcode[1];
char tariefaf[1];
};
const int HIGHVALUE = 99999;
void writeKlantbestand(ofstream& outputFile2, int klnr, char klsrt[], char klnaam[], char kladr[],
char klpstcd[], char klplts[], long klbnr, long klgiro, char mutcode[], char tariefaf[]);
void writeRecord(char best1[]);
void uitvoer(char best1[], char best2[], char best3[], char best4[], char best5[], char best6[]);
void klbnieuw(char best1[], char best4[]);
void controleerdatum(char best7[]);
int main()
{
writeRecord("B0100.dat");
controleerdatum("B0001.csv");
uitvoer("B0100.dat", "B1000.txt", "V0100.txt", "klantb-nieuw.dat", "B0101.dat", "constant.txt");
return 0;
}
void writeKlantbestand(ofstream& outputFile2, int klnr, char klsrt[], char klnaam[], char kladr[],
char klpstcd[], char klplts[], long klbnr, long klgiro, char mutcode[], char tariefaf[])
{
klbstd bes;
bes.klnr = klnr;
strcpy(bes.klsrt, klsrt);
strcpy(bes.klnaam, klnaam);
strcpy(bes.kladr, kladr);
strcpy(bes.klpstcd, klpstcd);
strcpy(bes.klplts, klplts);
bes.klbnr = klbnr;
bes.klgiro = klgiro;
strcpy(bes.mutcode, mutcode);
strcpy(bes.tariefaf, tariefaf);
outputFile2.write( (char *) &bes, sizeof(klbstd));
}
void writeRecord(char best1[])
{
ofstream outputFile;
outputFile.open(best1, ios::binary);
if (outputFile.fail())
{
cout << "Het bestand: " << best1 << " bestaat niet\n";
exit(3);
}
writeKlantbestand(outputFile, 03451, "A", "Jan", "Weg 13", "4232fd", "Niemendal", 2468567805, 4466706, " ", " ");
writeKlantbestand(outputFile, 03736, "B", "Piet", "Straat 15", "4674jj", "Niemendal", 4746364853, 6566848, " ", " ");
writeKlantbestand(outputFile, 04045, "A", "Tina", "Baan 17", "4577gf", "Niemendal", 6736747342, 6646868, " ", " ");
writeKlantbestand(outputFile, 04356, "C", "Nico", "Allee 19", "2355hj", "Niemendal", 6764575883, 64686486, " ", " ");
writeKlantbestand(outputFile, 04555, "A", "Klaas", "Laan 21", "8796ff", "Niemendal", 8468486489, 14644302, " ", " ");
writeKlantbestand(outputFile, 04657, "C", "Hans", "Weg 23", "5443ty", "Niemendal", 1468644634, 2443665, " ", " ");
writeKlantbestand(outputFile, 05745, "E", "Mike", "Straat 75", "4578fy", "Niemendal", 1246846468, 9036362, " ", " ");
writeKlantbestand(outputFile, 05777, "B", "Erik", "Baan 3", "2345se", "Niemendal", 4674675652, 6376230, " "," ");
writeKlantbestand(outputFile, 06534, "D", "Johan", "Allee 9", "4678fg", "Niemendal", 6468466845, 1353566, " "," ");
writeKlantbestand(outputFile, 07510, "A", "Klaas", "Straatje 51", "2346gh", "Niemendal", 1468468643, 4143243, " ", " ");
writeKlantbestand(outputFile, 07635, "D", "Henk", "Laaantje 23", "3467rt", "Niemendal", 1468864644, 2235294, " ", " ");
writeKlantbestand(outputFile, HIGHVALUE, "", "", "", "", "", 1, 1, "", "");
outputFile.close();
}
void controleerdatum(char best7[])
{
ifstream invoerdatum;
invoerdatum.open(best7);
if (invoerdatum.fail())
{
cout << best7 << "kon niet worden geopend" <<endl;
exit(1);
}
char lees;
invoerdatum.get(lees);
int komma = 0;
while (komma < 6)
{
if(lees == ';')
{
komma++;
}
invoerdatum.get(lees);
}
char zaterdag = '6';
char zondag = '7';
if (lees == zaterdag || lees == zondag)
{
cout << "Het is weekend dus party time" << endl;
exit(2);
}
invoerdatum.close();
}
void leesinput1(ifstream& input1, klbstd& klbstdOud, int& klnrinput1)
{
input1.read( (char *) &klbstdOud, sizeof(klbstd));
klnrinput1 = klbstdOud.klnr;
if(input1.eof())
klnrinput1 = HIGHVALUE;
}
void leesinput2(ifstream& input2, int klnr, char klsrt[], char klnaam[], char kladr[], char klpstcd[], char klplts[], long klbnr, long klgiro, char mutcode[], char tariefaf[])
{
input2.ignore(1,';');
input2 >> klnr;
input2.ignore(100,';');
input2 >> klsrt;
input2.ignore(100,';');
input2 >> klnaam;
input2.ignore(100,';');
input2 >> kladr;
input2.ignore(100,';');
input2 >> klpstcd;
input2.ignore(100,';');
input2 >> klplts;
input2.ignore(100,';');
input2 >> klbnr;
input2.ignore(100,';');
input2 >> klgiro;
input2.ignore(100,';');
input2 >> mutcode;
input2.ignore(100,';');
input2 >> tariefaf;
input2.ignore(100,';');
if (input2.eof())
klnr = HIGHVALUE;
}
void uitvoer(char best1[], char best2[], char best3[], char best4[], char best5[], char best6[])
{
ifstream input1;
ifstream input2;
ifstream input3;
ofstream output1;
ofstream output2;
ofstream output3;
klbstd bes1, bes2;
int klnrinput1=0;
int klnrinput2=0;
klbstd klbstdOud;
int komma = 0;
input1.open(best1, ios::in | ios::binary);
if (input1.fail())
{
cout << best1 << " kon NIET worden geopend.\n";
exit(1);
}
input2.open(best2);
if (input2.fail())
{
cout << best2 << " kon NIET worden geopend.\n";
exit(1);
}
input3.open(best6);
if (input3.fail())
{
cout << best6 << " kon NIET worden geopend.\n";
exit(1);
}
output1.open(best3);
if (output1.fail())
{
cout << best3 << " kon NIET worden geopend.\n";
exit(1);
}
output2.open(best4, ios:ut | ios::binary);
if (output2.fail())
{
cout << best4 << " kon NIET worden geopend.\n";
exit(1);
}
output3.open(best5, ios:ut | ios::binary);
if (output3.fail())
{
cout << best5 << " kon NIET worden geopend.\n";
exit(1);
}
output1 << setw(3) << "Kantoor: Arnhem FOUTVERSLAG datum: 13-10-2003 blad: 1\n";
output1 << "\n";
output1 << setw(3) << "Klantnummer" << " Mutatie"<<" Foutmelding\n";
output1 << "----------- ---------- --------------------------------\n";
input1.read((char *) &bes1.klnr , sizeof(bes1.klnr));
input2.read((char *) &bes2.klnr , sizeof(bes2.klnr));
leesinput1(input1, klbstdOud, klnrinput1);
leesinput2(input2, bes2.klnr, bes2.klsrt, bes2.klnaam, bes2.kladr, bes2.klpstcd, bes2.klplts, bes2.klbnr, bes2.klgiro, bes2.mutcode, bes2.tariefaf);
while (klnrinput1 != HIGHVALUE || klnrinput2 != HIGHVALUE)
{
if (bes2.klnr == bes1.klnr)
{
output2 << setiosflags(ios::left)<<setw(8)<<bes1.klnr <<setw(8) <<bes1.klsrt<< setw(8) <<bes1.klnaam << setw(8) <<bes1.kladr <<
setw(8)<<bes1.klpstcd <<setw(8) << bes1.klplts << setw(8) <<bes1.klbnr << setw(8) <<bes1.klgiro << setw(8) <<bes1.mutcode<<setw(8)<<bes1.tariefaf<<endl;
output3 << setiosflags(ios::left)<<setw(8)<<bes1.klnr <<setw(8) <<bes1.klsrt<< setw(8) <<bes1.klnaam << setw(8) <<bes1.kladr <<
setw(8)<<bes1.klpstcd <<setw(8) << bes1.klplts << setw(8) <<bes1.klbnr << setw(8) <<bes1.klgiro << setw(8) <<bes1.mutcode<<setw(8)<<bes1.tariefaf<<endl;
leesinput2(input2, bes2.klnr, bes2.klsrt, bes2.klnaam, bes2.kladr, bes2.klpstcd, bes2.klplts, bes2.klbnr, bes2.klgiro, bes2.mutcode, bes2.tariefaf);
}
else
if (bes2.klnr > bes1.klnr)
{
output2 << setiosflags(ios::left)<<setw(8)<<bes1.klnr <<setw(8) <<bes1.klsrt<< setw(8) <<bes1.klnaam << setw(8) <<bes1.kladr <<
setw(8)<<bes1.klpstcd <<setw(8) << bes1.klplts << setw(8) <<bes1.klbnr << setw(8) <<bes1.klgiro << setw(8) <<bes1.mutcode<<setw(8)<<bes1.tariefaf<<endl;
leesinput2(input2, bes2.klnr, bes2.klsrt, bes2.klnaam, bes2.kladr, bes2.klpstcd, bes2.klplts, bes2.klbnr, bes2.klgiro, bes2.mutcode, bes2.tariefaf);
}
else
if (bes2.klnr < bes1.klnr)
{
cout <<"Dit is geen goede record"<<endl;
exit(1);
}
}
input1.close();
input2.close();
input3.close();
output1.close();
output2.close();
output3.close();
}
-
October 28th, 2003, 11:41 AM
#2
Post the loop only.
Kuphryn
-
October 28th, 2003, 12:26 PM
#3
I don't see any way for the loop condition (klnrinput1 & 2) to change inside the loop.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|