Anzeige:
Ergebnis 1 bis 2 von 2

Thema: c strings manipulieren, struct?

  1. #1
    Partyqueen
    Gast

    Question c strings manipulieren, struct?

    Hallo zusammen...

    HILFE!!! mit Cobol und VB komm ich ja zurecht- aber c scheint mir momentan den Garaus zu machen

    Ich muss in C ein Programm schreiben, was eine Datei einliest, diese Daten verwerten und in einem anderen Format wieder ausgeben.

    Da in dem Ausgabeformat fest definierte Werte drin sind und nur ein paar der ausgelesenen Werte dort zwischen gebastelt werden müssen, wollte ich mein Glück mit einem Struct versuchen.

    Bei der Eingabe habe ich allerdings schon das Problem, dass die benötigten Werte nicht immer an der gleichen Stelle stehen- was sich jedoch anhand der ersten 3 Stellen der Zeile ausmachen läßt

    zB:

    if "001" dann mach Verarbeitung x

    else
    if "002" dann mach Verarbeitung y
    else mach Verarbeitung z

    ...............

    Wollte dann die entsprechenden Werte an die Stellen im Struct zuweisen und den dann ausgeben.
    Zudem muss ich noch die Länge des kompletten Structs wissen und das in das Struct mit rein schreiben.

    Meine Idee war nun, Zeilenweise einlesen, verarbeiten, ins struct schreiben. Struct in ein Array schreiben (als Rückgabewert erhalte ich ja die Länge des Structs) und dann in die Datei schreiben.

    Das Struct wollte ich in der Header-Datei deklarieren und dort auch schon die feststehenden Werte zuweisen. Oder mach ich das in meiner .c-Datei?

    Kann ich ein Struct einfach so schreiben?

    Mein Coding sieht momentan wie folgt aus

    Code:
    #include "hinweise.h"
    // Struct für DAS deklarieren
    
    struct DAS {
        char SatzLaenge [5];
        char filler1       [12] ;
        char StNr       [18];
        char Ufa        [2];
        char filler2    [2];
        char Zeitraum   [4];
        char filler3    [8];
        char DeDatum    [8];
        char filler4    [40];
        char filler5    [8];
        char filler6    [6];
        char DeDatum2   [8];
        char filler7    [60];
    } Ausgabe;
    
    struct EinSatz
    {
        char SB [3];
        char Rest [253];
    } Eingabe;
    
    struct Ein_Um
    {
        char filler1 [8];
        char Nr      [4];
        char Ergaenz [10];
        char filler2 [234];
    
    } Eingabe_Um;
    
    // Datei-Pointer
    static FILE *fInput, *fOutput;
    
    signed long Einlesen()
    {
      char szBuffer[MAX_LEN];
      long lRet;
    
      // Prüfen und Öffnen der Dateien
    	lRet = CheckFiles();
      if ( lRet == HW_SUCCESS)
      {
    
    
    //Vorlesen
        fgets(szBuffer, MAX_LEN, fInput);
    
    
        while ( !feof(fInput) )
        {
    // Lesen bis Ende
    //Verarbeitung
    
    ??????????????????????????????????????????????????
    
    // weiterlesen
          Stream(szBuffer);
          fgets(szBuffer, MAX_LEN, fInput);
        }
    // Gucken, ob noch was im Buffer drin ist, da im letzten String DateiEnde drin sein kann
        if ( strlen(szBuffer) > 0 )
          Stream(szBuffer);
        fclose(fInput);
        fclose(fOutput);
      }
    
      return lRet;
    }
    
    
    static size_t Stream(const char *szBuf)
    //
    // Schreiben mit Zeilenvorschub
    //
    {
      fprintf(fOutput, "%s\n", szBuf);
      return (strlen(szBuf) + 1);
    }
    
    static long CheckFiles(void)
    {
      fInput = fopen(HW_DAT, "r");
      if ( fInput != NULL )
      {
    		fOutput = fopen(T7W_DAT, "a");
    		if ( fOutput != NULL )
        {
          return HW_SUCCESS;
        } else {
    			fclose(fInput);
          return HW_T7W_FILE_ERROR;
    		}
    	} else {
        return HW_HINWEIS_FILE_ERROR;
    	}
    }
    ***** und meine HeaderDatei*************
    Code:
    #define _CRT_SECURE_NO_DEPRECATE 1      // Sicherheitswarnungen ausschalten
    
    // falls Header-Datei mehrfach drin (durch include anderer Dateien), werden die hier nur eingefügt, wenn noch nicht vorhanden ANFANG
    #ifndef __HINWEISE_H__
    #define __HINWEISE_H__
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    // Rückmeldungen der DLL
    #define HW_SUCCESS               0
    #define HW_HINWEIS_FILE_ERROR   -1
    #define HW_T7W_FILE_ERROR       -2
    #define MAX_LEN                 256
    
    
    // Namen von Dateien - Hinweise = EIngabe, G53 = Ausgabe
    #define HW_DAT "HINWEISE"
    #define T7W_DAT "G53"
    
    // Prototypen
    // Static, damit nicht von außen ansprechbar
    static long CheckFiles(void);
    static size_t Stream(const char*);
    static void Init(const char*);
    static signed long Einlesen();
    
    // falls Header-Datei mehrfach drin, werden die hier nur eingefügt, wenn noch nicht vorhanden ENDE
    #endif // __HINWEISE_H__
    *********

    Könnt ihr mir helfen? Sind Structs eine so gute Idee?
    Hoffe, es war halbwegs verständlich.. =)

    Lieben Dank
    Geändert von Berufspenner (11-08-2008 um 20:54 Uhr)

  2. #2
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Hallo,

    kannst du bitte dein Posting bearbeiten und für den Code die [code]-Tags verwenden, so macht es keinen Spaß das zu lesen
    Ein gebrechlich Wesen ist der X-Server.

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •