Zeilenumbruch und Länge einer Zeile



  • hi,

    ich habe mal wieder ein kleines problem, mit dem ich mir jetzt shcon den abend um die ohren haue 😞

    ich möchte eine ganz simple verschlüsselung auf eine text-datei legen. diese soll einfach zwei nebeneinanderliegende zeichen umtauschen...also aus "holger" würde "ohglre" werden...

    ich hab das folgendermassen umgesetzt:

    FILE *fp, *fp2;
      char *cZeil1, *cZeil2, cZ1[255], cZ2[255], cTemp1, cTemp2;
      int i = 0, iLength = 0;
    
      cZeil1 = cZ1;
      cZeil2 = cZ2;
      fp=fopen("text1.dat","r");
      fp2=fopen("text2.dat","wt");
      while(feof(fp) == 0)
      {
      	fgets(cZeil1, 255, fp);
    
      	iLength = strlen(cZeil1);
      	printf("Länge: %d", iLength);
    
      	while(cZeil1[i] != '\0' && cZeil1[i+1] != '\0')
      	{
      		cTemp1 = cZeil1[i];
    		cTemp2 = cZeil1[i+1];
    		cZeil2[i] = cTemp2;
    		cZeil2[i+1] = cTemp1;
    		i = i+2;
    	}
    
    	if(cZeil1[i] == '\0') cZeil2[i] = '\0';
    	else
    	{
    		cZeil2[i] = cZeil1[i];
    		cZeil2[i+1] = '\0';
    	}
    
    	i = 0;
    
      	fputs(cZeil2,fp2);
      }
    

    iLength ist die länge jeder einzlenen zeile...ich habe nun das problem, das mir manchmal ein zeichen am ende einer zeile geklaut wird. die zeile "hallo du" ist in der original-datei 10 zeichen lang, in meiner kopie aber nur 9. ich hab keine ahnung, was ich falsch gemacht habe? ich weiß auch nicht so recht, wie ich die zeilenumbrüche zum laufen bekomme. laut meiner idee müsste es so laufen 🙂

    vielleicht erkennt ja jemand sofort den fehler oder das problem...

    danke sehr

    der hoeen



  • #include <stdio.h>
    #include <conio.h>
    
    #define SIZE 100
    
    int main(char argv,int *argc)
    {
    	char normal[SIZE]={0};
    	char versch[SIZE]={0};
    
    	int d,p,w=1,x=0,y=1,z=0;
    
    	fgets(normal,SIZE,stdin);
    
    	while(normal[x]!='\0'||normal[y]!='\0') //meine Idee zeichen zu vertauschen
    	{
    		versch[x]=normal[y];
    		versch[w]=normal[z];
    		w+=2;
    		x+=2;
    		y+=2;
    		z+=2;
    
    	}
    	for(p=0;p<=SIZE;p++)
    	{
    		if(versch[p]=='\n')
    		{
    			versch[p]=' ';      //Zeilenumbruch \n mit ' ' leerzeichen ersetzen
    			d=p;                //d den gleichen wert wie p zuweisen
    			d++;                //d um 1 erhöhen
    			versch[p]=versch[d];//d also das letzte Zeichen über das leerzeichen schreiben
    			p++;                //p um eins hoch
    			versch[p]='\0';     //dem doppelt vorhandenen letzten wieder Zeilenumbruch zuweisen \n
    			break;
    		}		
    	}
    	fputs(versch,stdout);
    	getch();
    	return(0);
    }
    

    Ähm ich hab dir was sieht kompliziert aus ist es nicht!
    und es FUnktioniert!

    Teste des mal!

    mfg hohesC



  • Äh fast hätt ichs vergessen, bei meiner version musst halt noch das lesen und schreiben auf die datei umlenken, hab das so gemacht das man es sieht das es klappt.

    mfg hohesC 🙂



  • jo, danek sehr 🙂 ich hab es jetzt nicht mit strings sonder mit charactern realisiert...

    fp=fopen(cZeil1,"r");
      fp2=fopen(cZeil2,"wt");
    
      do
      {
      	i1 = fgetc(fp) + IV;
      	i2 = fgetc(fp) + IV;
      	fputc(i2, fp2);
      	fputc(i1, fp2);
      }while(feof(fp) == 0);
    
      fclose(fp);
      fclose(fp2);
    

    leider schreibt er mir jetzt noch mehrere ypsilons ans ende...weiß jemand warum?


Anmelden zum Antworten