Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Grundsätzliches Problem mit Datei einlesen/auslesen

Empfohlene Antworten

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

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

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;

}

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

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.