11. Juni 200817 j Ich habe eine Datei vorliegen, die wie folgt aussieht: ZZ5555 Text Text Text Text ZZ4444 ABCDEFG ZZ6666 Irgendwas Diese Werte muss ich in eine Datei schreiben, die wie folgt aussehen soll: 'ZZ5555';'2008';'True';'True';'True' Hat jemand einen Denkanstoß?
11. Juni 200817 j - Lies eine Zeile aus der Quelldatei - Schreib ' in die Zieldatei - Schreib die ersten 6 Zeichen der eingelesenen Zeile in die Zieldatei - Schreib ';'2008';'True';'True';'True' in die Zieldatei Ist doch nicht so schwierig.
11. Juni 200817 j Autor Und wie kann ich nur die ersten 6 Zeichen auslesen? Gibt es in C sowas wie substring(0,6)? Ich suche mir nämlich schon einen Wolf.
11. Juni 200817 j strncpy. Oder setz an die siebte Stelle des Puffers, in den du die Zeile eingelesen hast, ein Nullbyte. Achtung: strncpy setzt keine Nullterminierung, wenn der Quellstring länger als angefragt ist.
11. Juni 200817 j - ifstream erzeugen. - Datei öffnen. - getline benutzen. - ggf. nach Separator(hier Leerzeichen) splitten. - Daten speichern. - Datei schließen. :floet:
11. Juni 200817 j Autor #include <stdio.h> #include <iostream> #include <fstream> void datei_lesen() { FILE *datei; char zeichen; int c = 0; datei = fopen("Kat_A2_5.xls", "r"); if(datei == NULL) { printf("\nDatei kann nicht geöffnet werden\n"); } else { c = fgetc(datei); while(!feof(datei)) { zeichen = getc(datei); putc(zeichen, stdout); } fclose(datei); printf("\n\nDanke"); } } void datei_schreiben(void) { FILE *datei; datei = fopen ("Kat_A2_5_MAS_ueberarbeitet.csv", "w+"); if(datei == NULL) { printf("\nDie Datei konnte nicht geöffnet werden!\n"); } else { fprintf(datei, "'"); fprintf(datei, "2008"); fprintf(datei, "'"); fprintf(datei, ";"); fclose(datei); } } int main() { datei_lesen(); datei_schreiben(); return 0; } So sieht das derzeit bei mir aus. Jetzt habe ich folgende Fragen: 1) Wie kann ich die Variable zeichen öffentlich machen, dass ich auch in de Methode datei_schreiben() drauf zugreifen kann? 2) Wenn ich sage zeichen = getc(datei); strncpy(zeichen2, zeichen, 6); bekomme ich die Fehlermeldung "initalizing argument 1 of 'char* strncpy(char*, const char*, size_t)' invalid conversion from 'char' to 'const char*' Wie muss ich die Methode strncpy korrekt anwenden?
11. Juni 200817 j Oops. :floet: Dann halt so: - FILE-Pointer mit fopen erzeugen. (read only) - max. Zeichenanzahl einer Zeile festlegen. (unten wird 128 festgelegt) - lesen while != null. (Ich liebe es echte und Programmiersprachen zu mischen) - schließen. bsp: include <stdio.h> int main ( void ) { static const char filename[] = "file.txt"; FILE *file = fopen ( filename, "r" ); if ( file != NULL ) { char line [ 128 ]; /* or other suitable maximum line size */ while ( fgets ( line, sizeof line, file ) != NULL ) /* read a line */ { fputs ( line, stdout ); /* write the line */ } fclose ( file ); } else { perror ( filename ); /* why didn't the file open? */ } return 0; }
11. Juni 200817 j 1) Wie kann ich die Variable zeichen öffentlich machen, dass ich auch in de Methode datei_schreiben() drauf zugreifen kann? Der ganze Aufbau ist Quatsch. Deine Funktionen werden nacheinander abgearbeitet. Der Status, den du dann vorhalten müsstest, wäre der gesamte Dateiinhalt, nicht nur ein Zeichen. Du musst zeilenweise abwechselnd lesen und schreiben. Zeilenweise bedeutet fscanf oder fgets, nicht fgetc. Wie muss ich die Methode strncpy korrekt anwenden?strncpy kopiert - wie der Name schon sagt - Strings, keine einzelnen Zeichen.
11. Juni 200817 j Autor @ TDM ich habe mal Deinen Code ausprobiert - da kam jetzt nur Murks aus. Murks heisst, Sonderzeichen wie das D durchgestrichen, wie ein Quadrat und das +- nur übereinander.:confused: In der auslesenden Datei "test.xls" steht aber drinn AAA Test Test Test.
11. Juni 200817 j ich habe mal Deinen Code ausprobiert - da kam jetzt nur Murks aus. Murks heisst, Sonderzeichen wie das D durchgestrichen, wie ein Quadrat und das +- nur übereinander.:confused: In der auslesenden Datei "test.xls" steht aber drinn AAA Test Test Test.In der Datei steht genau das drin, was TDMs Programm ausgibt. Deine Aussage, die Grundlage für TDMs Code war: Ich habe eine Datei vorliegen, die wie folgt aussieht: ZZ5555 Text Text Text Text ZZ4444 ABCDEFG ZZ6666 Irgendwaswar nämlich falsch. So sieht die Datei nicht aus, sondern so zeigt Excel sie an. Das ist ein großer Unterschied. Das .xls-Dateiformat ist ein binäres Format, noch dazu ein nichtöffentliches. Da kannst du nicht erwarten, die Inhalte einfach so auslesen zu können. Das funktioniert mit Textdateien, aber nicht mit irgendwelchen proprietären Binärformaten.
12. Juni 200817 j ähm, xls? (Hab ich was überlesen?! ) Dann ist's klar, dass das nicht so funktioniert... Entweder du machsts über (eklige) COM-Frimelei - denk mal das geht zumindest in C oder du greifst mittels OleDB drauf zu, wär aber dann C++.
12. Juni 200817 j Alex_winf01, bitte erstelle nicht mehrere Threads zum selben Problem. Hier geht's weiter: http://forum.fachinformatiker.de/c-c/117078-zusammenarbeit-excel-c.html
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.