Mit C oder C++ Umsetzbar?
-
Sowas kannst du auch in Java und .NET machen, da gehts noch einfacher nun schneller.. oder muss es C/C++ seinß
-
Ich würde das sogar in python empfehlen. Ist noch einfacher. Sprichts nichts dagegen bei sowas simplem. Aber, wenn sie sich C oder C++ verbessern will, ist das auch eine interessante Übung.
-
Hallo,
ich würde am liebsten c oder Java verwenden weil ich da etwas Kenntnisse habe...
So grob hab Ich es verstanden, aber wie kann Ich dem Programmcode bewusst machen, dass zur selben Zeit 3 Unterschiedliche Dateien gelesen werden und dann noch zur selben zeit eine neue erstellt wird.
Das ganze macht mir total zu schaffen...
-
Indem du 4 Filestreams öffnest, 3 zum Lesen und 1 zum Schreiben.
Dazu nutzt man fopen, byteweises Lesen fgetc und Schreiben mit fputc.
Zum Schluss noch 4x fclose.
-
Keine Ahnung, ob das kompiliert und richtig funktioniert. Hab das mal eben schnell hinge[k|h]ackt.
#include <stdio.h> #include <stdlib.h> int main() { char byte1, byte2, byte3; FILE *f1, *f2, *f3, *f4; f1 = fopen(file_name,"r"); // read mode f2 = fopen(file_name,"r"); // read mode f3 = fopen(file_name,"r"); // read mode f4 = fopen(file_name,"w"); // write mode if( f1 == NULL || f2 == NULL || f3 == NULL || f4 == NULL ) { perror("Error while opening the file.\n"); exit(EXIT_FAILURE); } while( ( byte1 = fgetc(f1) ) != EOF ) { byte2 = fgetc(f2) byte3 = fgetc(f3) if (byte1 != byte2) fputc(byte2, f4); else fputc(byte3, f4); } fclose(f1); fclose(f2); fclose(f3); fclose(f4); return 0; }
-
Einfach schrieb:
Keine Ahnung, ob das kompiliert
file-name ist undefiniert.
Einfach schrieb:
und richtig funktioniert.
Zumindest byte1 sollte ein
int
sein, sonst klappt das nicht mit demEOF
.
Bei den anderen schadet es aber auch nicht.Und der binary-Mode beim fopen wäre noch ganz sinnvoll.
-
#include <stdio.h>
#include <stdlib.h>int main()
{
char byte1, byte2, byte3;
FILE *f1, *f2, *f3, *f4;f1 = fopen("E:\test\1.bin","r"); // read mode
f2 = fopen("E:\test\2.bin","r"); // read mode
f3 = fopen("E:\test\3.bin","r"); // read mode
f4 = fopen("E:\test\4.bin","w"); // write modeif( f1 == NULL || f2 == NULL || f3 == NULL || f4 == NULL )
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}while( ( byte1 = fgetc(f1) ) != EOF ) {
byte2 = fgetc(f2);
byte3 = fgetc(f3);if (byte1 != byte2)
fputc(byte2, f4);
else
fputc(byte3, f4);
}fclose(f1);
fclose(f2);
fclose(f3);
fclose(f4);return 0;
}hab die kleinen Fehler beheben könnönen aber es wird keine datei erstellt....
-
@sandyyyyyy:
1. Hast du mal gedebuggt? Mit "einfach compilieren und ausführen" kommst du sehr sehr schnell an Grenzen!2. Hast du DirkBs Beitrag überhaupt gelesen und zu Herzen genommen? Bist du einfach nur an schnellen und fertigen Lösungen interessiert?! Ein "Danke" kam auch nicht von dir, als ob das selbstverständlich wäre, dass jemand eine 95%-Lösung für dich codet...
-
Compiler: Default compiler Building Makefile: "C:\Dev-Cpp\Makefile.win" Executing make... make.exe -f "C:\Dev-Cpp\Makefile.win" all gcc.exe -c "../Dokumente und Einstellungen/user/Desktop/main.c" -o "../Dokumente und Einstellungen/user/Desktop/main.o" -I"C:/Dev-Cpp/include" gcc.exe "../Dokumente und Einstellungen/user/Desktop/main.o" -o "Project1.exe" -L"C:/Dev-Cpp/lib" -mwindows
Execution terminated
Compilation successfulSo sieht es im DEV C++ Compiler aus:
http://de.share-your-photo.com/c7ecc53ebd
-
@sandyyyyyy:
1. Hast du mal gedebuggt? Mit "einfach compilieren und ausführen" kommst du sehr sehr schnell an Grenzen!2. Hast du DirkBs Beitrag überhaupt gelesen und zu Herzen genommen?
-
Hab den Code abgeändert, so wie Dirk sagte, sprich byte1 als integer deklariert.
#include <stdio.h> #include <stdlib.h> int main() { int byte1; char byte2, byte3; FILE *f1, *f2, *f3, *f4; f1 = fopen("E:\test\1.bin","r"); // read mode f2 = fopen("E:\test\2.bin","r"); // read mode f3 = fopen("E:\test\3.bin","r"); // read mode f4 = fopen("E:\test\4.bin","w"); // write mode if( f1 == NULL || f2 == NULL || f3 == NULL || f4 == NULL ) { perror("Error while opening the file.\n"); exit(EXIT_FAILURE); } while( ( byte1 = fgetc(f1) ) != EOF ) { byte2 = fgetc(f2); byte3 = fgetc(f3); if (byte1 != byte2) fputc(byte2, f4); else fputc(byte3, f4); } fclose(f1); fclose(f2); fclose(f3); fclose(f4); return 0; }
Kann jedoch kein Unterschied feststellen, alles funktionier problemlos debuggen, compelieren als auch run. Jedoch ist keine neue Datei in Ordner test namens 4
-
Entweder die backlashes in den Pfaden escapen ('\' -> '\') oder forward slashes verwenden ...
-
so mein Ausführen gabs jetzt Folgender Fehler im MSDOS
ERROR while opening the file
:permission deniedZugriff auf die Datei wird aus irgendwelchen Grund verweigert?
-
nun klappts mit dem ausführen, danke, das Programm jedoch klappt das Programm nicht wirklich wie gewünscht.
File 1,2,3 hat die Zeile bis 3F0
File 4 hat jedoch nur 3 Zeilen.
Anbei alle 4 Dateien:
http://workupload.com/file/8wJAVfzm
-
DirkB schrieb:
[...] Und der binary-Mode beim fopen wäre noch ganz sinnvoll.
-
Einfach schrieb:
@sandyyyyyy:
...Bist du einfach nur an schnellen und fertigen Lösungen interessiert?! ...Bin ich der Einzige, der nach drei Postings des TE in diesem Thread genau diesen Eindruck hat?
-
@sandyyyyyyy: Ich hoffe, dass du nur ein Azubi im ersten Jahr bist! Wenn das dein Praktikum fürs Studium ist, ist das mehr als peinlich, denn das bedeutet, dass du dich die ganze Zeit vorbei gemogelt hast, sprich, du warst, so wie jetzt, nur an schnellen Lösungen von Kommilitonen interessiert und entsprechend hast du jetzt keine Skills und kriegst jetzt eine einfache Aufgabe nicht mal mit großzügiger Hilfestellung hin. Du überliest Tipps, willst einfach nur Code, dir ist der Sinn vom Debuggen nicht mal im geringsten klar und zeigst nicht mal einen Funken Dankbarkeit. Es würde mich nicht wundern, wenn du den Beitrag nicht mal mehr liest, weil sich dein Problem erledigt hat und du dich einfach kommentarlos aus dem Staub gemacht hast.
-
Belli schrieb:
Einfach schrieb:
@sandyyyyyy:
...Bist du einfach nur an schnellen und fertigen Lösungen interessiert?! ...Bin ich der Einzige, der nach drei Postings des TE in diesem Thread genau diesen Eindruck hat?
Nein.
-
Hallo,
so nun hab Ich es mit dem binär mode hinbekommen und die Software mit einigen Dateien überprüft. Man Kann sagen, dass es zu 80% super funktioniert.
Es gibt aber manschmal Fälle indem Byte1 und Byte2 gleich aber trotz dessen ein der Weet von Byte2 in der 4.bin geschrieben.Woran es liegt ist mir ein rätsel.
Bei den an gehangenen Dateien kommt es z.b. als erstes bei Byte D5 vor.
Eigentlich müsste 60 in 4.bin stehen jedoch steht D5 in der position.
Obwohl in 1.bin und 2.bin in der selben position die Werte D5 sind.Laut dem Hexaeditor sind es auch unterschiedliche Blnäre Werte, dürfte somit nicht passieren:
D5 1101 0101
60 0110 0000[code="c"]#include <stdio.h>
#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int byte1;
char byte2, byte3;
FILE *f1, *f2, *f3, *f4;f1 = fopen("C:\\Users\\HASSANEIN\\Desktop\\test\\1.bin","r+b"); // read mode
f2 = fopen("C:\\Users\\HASSANEIN\\Desktop\\test\\2.bin","r+b"); // read mode
f3 = fopen("C:\\Users\\HASSANEIN\\Desktop\\test\\3.bin","r+b"); // read mode
f4 = fopen("C:\\Users\\HASSANEIN\\Desktop\\test\\4.bin","w+b"); // write modeif( f1 == NULL || f2 == NULL || f3 == NULL || f4 == NULL )
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}while( ( byte1 = fgetc(f1) ) != EOF ) {
byte2 = fgetc(f2);
byte3 = fgetc(f3);if (byte1 != byte2 ) {
fputc(byte2, f4);
}else{
fputc(byte3, f4);
}}
// überprüfe ob Datei richtig ist
fclose(f1);
fclose(f2);
fclose(f3);
fclose(f4);printf("Mission erfolgreich!");
return 0;}[code="c"]
hier sind Dateien:
http://workupload.com/file/PUgeDRoR
-
Das liegt am Vorzeichen.
0xD5 ist bei
signed char
negativ.Mach alle byteX zu
int
.