Zum Inhalt springen

Grundsätzliches Problem mit Datei einlesen/auslesen


Alex_winf01

Empfohlene Beiträge

#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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 Irgendwas

war 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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ähm, xls? (Hab ich was überlesen?! :D)

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++.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast
Dieses Thema wurde nun für weitere Antworten gesperrt.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...