Zum Inhalt springen

Grundsätzliches Problem mit Datei einlesen/auslesen


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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.

Geschrieben

- ifstream erzeugen.

- Datei öffnen.

- getline benutzen. :rolleyes:

- ggf. nach Separator(hier Leerzeichen) splitten.

- Daten speichern.

- Datei schließen.

:floet:

Geschrieben

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

Geschrieben

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;

}

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

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

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

Geschrieben

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

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