[C] Leerzeichen entfernen aber wie?

Nimroth

Grünschnabel
Also ich habe folgendes Problem:

Ich will aus einer Datei den Inhalt herauskopieren und in eine neue Textdatei einfügen nur mit einer Struktur. Ich bin schon soweit das mein Programm das auch macht nur setzt er in der neuen Textdatei vor jede neue Zeile ein leerzeichen wodurch dann alles verrutscht, vielleicht hat ja hier jemand eine Lösung für das Problem.

Hier der Quellcode:
Code:
#include <stdio.h>
#include <stdlib.h>
#define ZEILENLAENGE 383

int main(void) {
   
FILE *quelle, *kopie;
   
   char puffer[ZEILENLAENGE];
   int i;
   
if( (quelle=fopen("C:\\Dokumente und Einstellungen\\Test\\Desktop\\C DATEI\\kunden.neu","r")) == NULL) {
      fprintf(stderr,"Kann datei nicht oeffnen\n");
      return EXIT_FAILURE;
   }
   if( (kopie=fopen("C:\\Dokumente und Einstellungen\\Test\\Desktop\\C DATEI\\kopie2.txt","w")) == NULL) {
      fprintf(stderr,"Kann kopie.txt nicht oeffnen\n");
      return EXIT_FAILURE;
   }
   while(fgets(puffer,ZEILENLAENGE,quelle)) {
      
    
      fputs(puffer, kopie);
      puts(puffer);
      fprintf(kopie,"\n");
      

    
   }
   return EXIT_SUCCESS;
}

Im anhang ist noch die Ausgangsdatei .

Vielen dank schonmal im vorraus .

MFG Nimroth
 

Anhänge

  • kopie5.txt
    1,2 KB · Aufrufe: 20
Hi.

Wie sieht denn die Eingabedatei aus?

Übrigens bleibt ein \n Zeichen erhalten wenn man mit fgets arbeitet, d.h. du brauchst nicht nochmal extra eins anhängen.

Gruß
 
Danke für dir Antwort.

Die Eingabedatei sieht so aus das alle informationen in einer Zeile stehen, der dateityp ist unbekannt und einfach mit NEU definiert da die datei Kundeninformationen beinhaltet kann ich sie hier so nicht bereitstellen. Dennoch habe ich es jetzt provisorisch in einer textdatein versucht zu simulieren :)

hoffe es hilft.
 

Anhänge

  • kopie6.txt
    1,2 KB · Aufrufe: 22
Danke für dir Antwort.

Die Eingabedatei sieht so aus das alle informationen in einer Zeile stehen, der dateityp ist unbekannt
Du mußt doch aber wissen wie die Datei aufgebaut ist?!

Für mich sieht es so aus, als ob dort Strings mit fester Länge einfach hintereinandergeklatscht wurden und die Daten mit Leerzeichen aufgefüllt wurden.

Wie kommst du denn z.B. auf die 383?

Gruß
 
Das hast du richtig erkannt , vielleicht hätte ich es besser beschreiben sollen , mein Fehler sry. Also ich habe eine vorlage bekommen nach dem Muster:

Kundenstamm:"d:\pfl\pflkund\kunden.neu" len = 383

4 kdnr, 10 anrede, 25 nname, 25 vname, 20 strasse, 5 plz, 30 ort, 15tel usw.....

und es stehen halt mehrere Datensätze in nur einer Zeile und diese muss ich trennen nur nach dem Trennen macht er halt das mit den Leerzeichen.
 
und es stehen halt mehrere Datensätze in nur einer Zeile und diese muss ich trennen nur nach dem Trennen macht er halt das mit den Leerzeichen.
Niemand macht da irgendwas mit den Leerzeichen, die sind schlichtweg in der Datei drin.

Bist du dir denn bewußt, dass fgets nur max. n-1 Zeichen einliest, wenn du n als zweiten Parameter übergibst? (D.h. es werden max. 382 Zeichen gelesen)

Gruß

\edit: wenn du gar nicht zeilenweise Einlesen willst, warum nimmst du dann überhaupt fgets? Nimm doch einfach fread.
 
SO hab jetzt alles über den haufen geworfen und mal nen anderen Ansatz für mein Programm versucht...

Ich will einfach nur das er eine Datei einliest dann die zeichen bis zu einer vorgegeben anzahl einliest und diese dann in eine andere Datei schreibt und nach der angegeben Zahl noch einen Break macht sodass alles untereinander statt nebeneinander steht... hoffe man versteht mich ...

So hier erstmal der Quellcode:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main(void) {
    
FILE *quelle, *ziel;
   
   int c, zl, z=0;
   char name_q[255], name_z[255];
   
   printf("Name Quelldatei : ");
   scanf("%s",name_q);
   quelle=fopen(name_q,"rb");
   
   if(quelle == NULL) {
      printf("Konnte %s nicht finden bzw. öffnen!\n",name_q);
      getch();
      return EXIT_FAILURE;
   }
   
   else {
      printf("Name Zieldatei : ");
      scanf("%s",name_z);
      ziel=fopen(name_z,"w+b");
      
      if(ziel==NULL)  {
         printf("Konnte Zieldatei nicht erzeugen!\n");
         return EXIT_FAILURE;                                                                                                                    
      }
      
      else {
    
      printf("Zeichenlänge : ");
      scanf("%d", &zl);
         
         do
          {   
            if (z != zl) {
                 fputc(c,ziel);
                
            }
            
            else {
                 z=0;
                 fprintf(ziel,"\r\n");
            }
            z++; 
          } while( (c=fgetc(quelle)) != EOF);
           
            
      }
   }
   return EXIT_SUCCESS;
     
}

und noch die Quelldatei ARTBEZ.DAT und die Zieldatei NEW.DAT.
 

Anhänge

  • Dateien.zip
    1,5 KB · Aufrufe: 12
Zurück