Alex_winf01 Geschrieben 11. Juni 2008 Geschrieben 11. Juni 2008 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ß?
Klotzkopp Geschrieben 11. Juni 2008 Geschrieben 11. Juni 2008 - 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.
Alex_winf01 Geschrieben 11. Juni 2008 Autor Geschrieben 11. Juni 2008 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.
Klotzkopp Geschrieben 11. Juni 2008 Geschrieben 11. Juni 2008 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.
Hexagon Geschrieben 11. Juni 2008 Geschrieben 11. Juni 2008 Moin. Würde man das ganze nicht per scanf in einem Rutsch erledigen können?
TDM Geschrieben 11. Juni 2008 Geschrieben 11. Juni 2008 - ifstream erzeugen. - Datei öffnen. - getline benutzen. - ggf. nach Separator(hier Leerzeichen) splitten. - Daten speichern. - Datei schließen. :floet:
Alex_winf01 Geschrieben 11. Juni 2008 Autor Geschrieben 11. Juni 2008 #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?
TDM Geschrieben 11. Juni 2008 Geschrieben 11. Juni 2008 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; }
Klotzkopp Geschrieben 11. Juni 2008 Geschrieben 11. Juni 2008 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.
Alex_winf01 Geschrieben 11. Juni 2008 Autor Geschrieben 11. Juni 2008 @ 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.
Klotzkopp Geschrieben 11. Juni 2008 Geschrieben 11. Juni 2008 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.
TDM Geschrieben 12. Juni 2008 Geschrieben 12. Juni 2008 ä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++.
Klotzkopp Geschrieben 12. Juni 2008 Geschrieben 12. Juni 2008 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
Empfohlene Beiträge