ein Wert geben und die passende zeile zurückgeben

tifa

Grünschnabel
hallo zusammen:
kann mir jemanden helfen:
ich will einfach (Zeile_B ) als text eingeben und erhalte ich als Ergebnis :
Wert_A1;Wert_A2;Wert_A3
wenn ich Zeile_C eingebe erhalte ich Wert_C1;Wert_C2;Wert_C3 als Ergebnis .

danke.

das ist mein code :


Code:
/*********************************************
 Kleines Demoprogramm zum Lesen aus einer Textdatei.
 Die Spalten sind durch ein Zeichen getreent
***********************************************/ 

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char *FName = "\\seiten.txt";
//char *FName = "C:\\Friedrich\\C_Projekte\\Test1\\Test.txt";
char *FNameX = "Test2.txt";

/*Definition der Funktionen*/
int Get_Line_count(char *);
int Get_Line(char *, int, char Sx[256]);
int Get_Spalte(int Spalt_Nr, char Trenn, char *Sx, char Sy[256]); 
int Get_Text_from_col(int , char *Tex);
int Get_Col1Txt_ColX(char *, char TrennZ, char *Col1Txt, int, char ColXtxt[256]);

/*++++++++++++++++++++++++++++++++++++++++
 Sucht in einer Textdatei (FName) den Text (Col1Txt) in der 1.Spalte
 und gibt aus dieser Zeile die Spalte (SpalteNr) zurück.
 Die Spalten müssen mit (TrennZ) getrennt sein.
 Leerzeichen im Text sind nicht erlaubt!
 return : -1 Datei nicht gefunden/geöffnet
           0 Text in Spalte nicht gefunden
           1 Ok, Text gefunden
 Bsp.Textdatei:
  Zeile_A;Wert_A1;Wert_A2;Wert_A3
  Zeile_B;Wert_B1;Wert_B2;Wert_B3
  Zeile_C;Wert_C1;Wert_C2;Wert_C3
  Zeile_D;Wert_D1;Wert_D2;Wert_D3
++++++++++++++++++++++++++++++++++++++++*/
int Get_Col1Txt_ColX(char *FName, char TrennZ, char *Col1Txt, int SpalteNr, char ColXtxt[256])
{
FILE *AFile;
int i=0;
int f=0;
char c='?';
char StrX[256];

//Datei öffnen ...
AFile = fopen(FName,"r");
if (AFile==NULL)
 {//1
 printf("Fehler beim oeffnen von: %s \n",FName);
 return (-1);
 }//1
else
 {//1e
 //printf("File is open: %s \n",FName);
 // suche nach Zeilenende:'/n' ...
 while (c!=EOF)
  {//Loop1
  c=fgetc(AFile);
  StrX[i]=c;
  i++;
  if (c=='\n')
   {//2
   //eine Zeile wurde gelesen ...
   i=i-1;
   StrX[i]='\0';
   i=0;
   //jetzt die Spalte 1 suchen ...
   if (Get_Spalte(1, TrennZ, StrX, ColXtxt)==1)
    {//3
    //Text aus Spalte 1 vergleichen ...
    if (strcmp(Col1Txt,ColXtxt)==0)
     {//4
     //Text aus Spalte (SpalteNr) holen ...
     if (Get_Spalte(SpalteNr, TrennZ, StrX, ColXtxt)==1)
      {//5
      //fertig, nun raus aus der Routine...
      f=1;
      break;
      }//5
     }//4
    }//3
   }//2
  }//Loop1
 }//1e
fclose(AFile);
//printf("Close File: %s \n",FName);
return (f);
}


/*++++++++++++++++++++++++++++++++++++++++
 Holt eine bestimmte Spalte aus dem String
 return: 0 Spalte nicht gefunden
         1 Spalte gefunden
++++++++++++++++++++++++++++++++++++++++*/
int Get_Spalte(int Spalt_Nr, char Trenn, char *Sx, char Sy[256])
{
int l=0, f=0;
int i=0;
int Sp=1;
int y=0;
l=strlen(Sx);
//printf("Sx: %s \n",Sx);
//printf("Get Col: %d \n",Spalt_Nr);
//jedes Zeichen im String durchsuchen ...
for (i=0;i<l;i++)
 {//1
 //printf("SX[%d] = %c == %c \n",i,Sx[i],Trenn);
 if (Sx[i]==Trenn)
  {//2
  //printf("Column %d \n",Sp);
  Sp++;
  }//2
 else
  {//2e
  if (Sp==Spalt_Nr)
   {//3
   // gefunden...
   Sy[y]=Sx[i];
   y++;
   f=1;
   }//3
  }//2e
 }//1

if (f>0)
 Sy[y]='\0';
else
 {
 printf("Spalte nicht gefunden!\n");
 Sy[0]='\0';
 }
return f;
}

/*++++++++++++++++++++++++++++++++++++++++*/
/*gibt die Anzahl der Zeilen in einer Datei zurück*/
/*++++++++++++++++++++++++++++++++++++++++*/
int Get_Line_count(char *FName)
{
FILE *AFile;
int lines=0;
char c='?';

AFile = fopen(FName,"r");
if (AFile==NULL)
 {//1
 printf("Fehler %s \n",FName);
 return (-1);
 }//1
else
 {//1e
 //printf("File is open: %s \n",FName);
 // suche nach Zeilenende:'/n' ...
 while (c!=EOF)
  {//Loop1
  c=fgetc(AFile);
  if (c=='\n')
   {//2
   lines++;
   }//2
  }//Loop1
 }//1e
fclose(AFile);
//printf("Close File: %s \n",FName);
return (lines);
}


/*++++++++++++++++++++++++++++++++++++++++*/
/*Holt eine bestimmte Zeile aus der Datei*/
/*++++++++++++++++++++++++++++++++++++++++*/
int Get_Line(char *FName, int Line_Nr, char Sx[256])
{
FILE *AFile;
char c='?';
int i=0;
int lines=0;

AFile = fopen(FName,"r");
if (AFile==NULL)
 {//1
 printf("Fehler %s \n",FName);
 return (-1);
 }//1
else
 {//1e
 //printf("File is open: %s \n",FName);
 //printf("Read line number: %d\n",Line_Nr);

 // suche nach Zeilenende:'/n' ...
 while (c!=EOF)
  {//Loop1
  c=fgetc(AFile);
  Sx[i]=c;
  i++;
  if (c=='\n')
   {//2
   i=i-1;
   Sx[i]='\0';
   lines++;
   i=0;
   if (lines>=Line_Nr)
    {//3
    //Die Zeile ist erreicht also raus...
    //printf( "Sx:[%s]\n",Sx);
    fclose(AFile);
    //printf("OK \n");
    //printf("Close File: %s \n",FName);
    return (1);
    }//3
   }//2
  }//Loop1
 }//1e
fclose(AFile);
printf("Not found!\n");
//printf("Close File: %s \n",FName);
return (0);
}

/*++++++++++++++++++++++++++++++++++++++++*/
/*suche nach bestimmten Text in einer Spalte*/
/*++++++++++++++++++++++++++++++++++++++++*/
int Get_Text_from_col(int Acol, char *Tex)
{
int l=0;
int i=0;
char S[256], Sy[256];
l=Get_Line_count(FNameX);
if (l<=0)
 return -1;
else
 {//1
 for (i=0;i<l;i++)
  {//2
  if (Get_Line(FNameX,i,S)>0)
   {//3
   if (Get_Spalte(1,';',S,Sy)>0)
    {//4
    if (strcmp(Sy,Tex)==0)
     {//5
     if (Get_Spalte(Acol,';',S,Sy)>0)
      {//6
      printf("Spalte %d: %s\n",Acol,Sy);
      break;
      }//6
     else
      printf("Keine Spalte %d\n",Acol);
     }//5
    else
     printf("Text nicht gleich. %s = %s\n",Sy,Tex);
    }//4
   else
    printf("Keine Spalte 1\n");
   }//3
  else
   printf("Keine Zeile.\n");
  }//2
 }
return 0;
}

/*++++++++++++++++++++++++++++++++++++++++*/
/*Hauptprogramm*/
/*++++++++++++++++++++++++++++++++++++++++*/
int main(int argc, char *argv[])
{
int l=0;
int i=0;
int col=0;
int Stop = 0;
char S[256], Sa[256], c;

//Das Hauptprogramm hat eine endlos-Schnleife, Loop
while (Stop==0)
{//Loop

//Nur so zum Spass S mit '?' füllen ...
for (i=0;i<255;i++)
 { S[i]='?'; }
S[i]='\0';

i=0;
//Wie soll gesucht werden ...
printf("suche nach einem Text in Spalte1? (y)\n");
scanf("%s",&c);
if (c=='y')
 {//1
 //es wird nach einem Namen in Spalte1 und der Spalte gesucht...

 printf("einen Text in Spalte 1 eingeben:\n");
 //printf("einen Text in Spalte1 und eine Spaltennummer eingeben:\n"); //siso

 scanf ("%d",&col);
 //scanf("%s %d",&S,&col);
 if (Get_Col1Txt_ColX(FNameX,';',S,col,Sa)==1)

  printf("Text in Spalte[%d] aus Zeile[%s] = [%s]\n",col,S,Sa);
 else
  printf("Text in Spalte[%d] aus Zeile[%s] nicht gefunden!\n",col,S);
 //Get_Text_from_col(col,S);
 }//1
else
 {//1e
 //es wird über die Nummer von Zeile und Spalte gesucht...

 printf("eine Zeilennummer und eine Spaltennummer eingeben:\n"); // siso

 scanf ("%d %d",&l, &col); // siso

 if (Get_Line(FNameX,l,S)>0)
  {//2
  printf("Zeile gefunden:[%s]\n",S);
  if (Get_Spalte(col,';',S,Sa)>0)
   {//3
   printf("Spalte gefunden:[%s]\n",Sa);
   }//3
  }//2
 }//1e

printf("nochmal mit 'n', 'any-key' zum beenden.\n");
scanf("%s",&c);
if (c!='n')
 Stop=1;

}//Loop
return 0;
}
 
moin


Halte dich bitte an die groß und klein Schreibung!
Mir ist das jetzt auch zuviel Aufwand den ganzen Text durchzulesen, besonders da es dir anscheinend auch zuviel Aufwand ist deinen Code zu kommentieren und auf deine Rechtschreibung zu achten.

Wo gibst du denn an welche Zeilennummer Zeile_B hat?!


mfg
umbrasaxum
 
Zurück