Hallo,
Ik ben bezig met een klein C++ projectje maar dat wil niet echt vlotten.
De laatste keer dat ik C++ progammeerde was ook alweer 4 jaar geleden
Roestig kunnen we dus rustig zeggen.
Wat wil ik doen: Ik heb een tekst file en daar wil ik een set tekens omzetten naar 1 character.
Het zijn de decimale karakters : 10, 13 en 13. Als ik die in een rij tegenkom wil ik ze omzetten
dat ik alleen 10 wegschrijf.
Ik heb het volgende al:
Zoals je wellicht kan zien is de regel
niet helemaal juist, maar dat is waarschijnlijk omdat er maar steeds 1 byte wordt ingelezen op dit moment....
Kan iemand mij een schop in de juiste richting geven?
Alvast bedankt!
Ik ben bezig met een klein C++ projectje maar dat wil niet echt vlotten.
De laatste keer dat ik C++ progammeerde was ook alweer 4 jaar geleden
Roestig kunnen we dus rustig zeggen.
Wat wil ik doen: Ik heb een tekst file en daar wil ik een set tekens omzetten naar 1 character.
Het zijn de decimale karakters : 10, 13 en 13. Als ik die in een rij tegenkom wil ik ze omzetten
dat ik alleen 10 wegschrijf.
Ik heb het volgende al:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| #include <stdio.h> #include <windows.h> FILE *InputFile; // Variable for Input File FILE *OutputFile; // Variable for Output File byte *iobyte; // Byte to read and write unsigned short nbRead = 0; // Returns the number of byte (read) unsigned short nbWrite = 0; // Returns the number of byte (write) void main (int argc, unsigned char **argv) { if(argc < 3) { return; } // Memory allocation iobyte = (byte *)malloc(1); // Open the input file (1st parameter) if( (InputFile = fopen((const char *)argv[1], "rb")) == NULL) { return; } // Open the output file (2nd parameter) if( (OutputFile = fopen((const char *)argv[2], "w+b")) == NULL) { fclose(InputFile); return; } nbRead = fread(iobyte, 1, 1, InputFile); while (nbRead == 1) { // Are the next 3 bytes 0A0D0D ? (10,13,13) if (*iobyte == 10 && (*iobyte + 1) == 13 && (*iobyte + 2) == 13) { // Write linefeed nbWrite = fwrite(&("\x0A"), 1, 1, OutputFile); // Read third byte nbRead = fread(iobyte, 1, 3, InputFile); } else { // Write 1 byte nbWrite = fwrite(iobyte, 1, 1, OutputFile); // Read next byte nbRead = fread(iobyte, 1, 1, InputFile); } } // Close input and output files and free memory fclose(InputFile); fclose(OutputFile); free(iobyte); return; } |
Zoals je wellicht kan zien is de regel
code:
1
| if (*iobyte == 10 && (*iobyte + 1) == 13 && (*iobyte + 2) == 13) |
niet helemaal juist, maar dat is waarschijnlijk omdat er maar steeds 1 byte wordt ingelezen op dit moment....
Kan iemand mij een schop in de juiste richting geven?
Alvast bedankt!