Zahlen aus Datei einlesen und auf ganzzahligkeit prüfen???



  • Hallo zusammen,
    ich habe Problem mit c/c++, also ich muss ein Programm machen aber wie?? 😞

    Also wir haben einige „file.txt“ (ein teil von eine text Datei schauen Sie bitte unten) in jedem txt Datei gibt es die Zahlen. Diese Zahlen, auf linke Seite fangen von 0x00000000 bis 0x00003fff. Das gilt für jede txt Datei so. aber auf rechte Seite(die Zahlen nach: kommen) für jede txt Datei bisschen unterschiedlich. Aber jede hat selber Regel (also sehen Sie bitte --> und <- ) PageNumber ist für jede txt file unterschiedlich. Also kann sein z.B.: (PageNumber 0/1 oder 1/20 --1.page von 20 pages...20/20 usw.)

    Also Mein Programm soll direkt erste PageNummer scannen und wissen, Wie viele pages wir haben. Und muss die zahlen prüfen, ob die in richtige Reihenfolge sind. Wenn z.B.: nach 0x00000004 --> 0x00000006 kommt, soll mein Programm error melden, dass es 0x00000005 nicht in Line gefunden hat. Bzw. für die reche Seite selbe weg gilt.
    Ich freue mich wenn jemand Ahnung hat und mir helfen kann 🙂
    Ich habe einigen code geschrieben aber die sind durcheinander
    ************
    Rev-ID=0x0012 FW=0x0012 …………………
    DMA Pages = 2 (0..1)
    DMA Buffer Number 0 (save only selected Buffer)
    PageNumber 0/1 ####################################################
    0x00000000:0x1b013fff---->
    0x00000001:0xefa5fff8<-
    0x00000002:0x1c020000---->
    0x00000003:0xefa50000<-
    0x00000004:0x1c020001---->
    0x00000005:0xefa50008<-
    0x00000006:0x1c020002---->
    0x00000007:0xefa50010<-
    0x00000008:0x1c020003---->
    0x00000009:0xefa50018<-
    .....
    ....
    0x00003ff9:0xf0a5ffd8<-
    0x00003ffa:0x00013ffc---->
    0x00003ffb:0xf0a5ffe0<-
    0x00003ffc:0x00013ffd---->
    0x00003ffd:0xf0a5ffe8<-
    0x00003ffe:0x00013ffe---->
    0x00003fff:0xf0a5fff0<-
    PageNumber 1/1 #####################################################
    0x00000000:0x00021fff---->
    0x00000001:0xf0a5fff8<-
    0x00000002:0x00012000---->
    0x00000003:0xf0a50000<-
    0x00000004:0x00012001---->
    ......
    ......
    0x00003ffc:0x00013ffd---->
    0x00003ffd:0xf0a5ffe8<-
    0x00003ffe:0x00013ffe---->
    0x00003fff:0xf0a5fff0<-

    ***********************************

    #include <stdio.h>
    	#include <string.h>
    	#include <iostream> // für std::cout 
    	#include <fstream> // für std::fstream 
    	#include <string> // für std::string und std::getline 
    	using namespace std;
    
    ///////////////////////////////////////////////////////////////////////////////////////
    int main ()
    {
    
      FILE *eingab;
      //long int eingel;
      if((eingab = fopen("file.txt", "rt")) == NULL)
      if(!eingab) 
      {
    	  cout << "Could not open file \"file.txt\"!" << endl;
      return 0;
      }
    int x=0;
    long int li1, li2;
    char * pEnd;
    
     char line [164]; //or other suitable maximum line size        
    	while ( fgets ( line, sizeof line, eingab ) != NULL ) //read a line 
    	{ 
    		x++;
    		li1 = strtol (line,&pEnd,0); //Zahlenwerte vor Semikolon in dezimale wandelt
    		li2 = strtol (pEnd,&pEnd,'0'); // Nach Semikolon sieht es als 0 :-( [es muss xxxxxxxxx:0xefa50020--> Zahlenwerte nach Semikolon in dezimale wandeln] 
    
    		cout << x <<"="<< li1 <<":"<< li2 <<"->" <<line ;
    	}
     while (!feof(eingab)) {
    ////////////////////////////////////////////////////////////////////////////////////////	  
     long currentPage = 0;
     long currentPageItem = 0;
     int myLineCount=1000;
    	for( int i = 0; i < myLineCount; i++ ) {
            char myLine[20];    //myLine enthält meine Zeile, die es auszuwerten gilt
    
            // Überprüfe, ob die Zeile mit 'PageNumber' beginnt
            if( strncmp(myLine, "PageNumber", 10) == 0 ) {
                    // Zeile fängt mit Page Number an, also Seitenzahl überprüfen
                   	int nextPage = getNextPageNumber(myLine);
    
    				if( nextPage - 1 != currentPage) {
                      printf("Fehler"); // Fehler Seitenzahl ist nicht gleich Seitenzahl -1
                    }
                    else {
                            currentPage++;
                    }                
                    continue;
    			}
    
             //Diese Zeile (myLine) beim Semikolon trennen
            char leftValue[10];    // enthält den String der links vom Semikolon steht
            char rightValue[10];  // enthält den String der rechts vom Semikolon steht
    
            //  Funktionen, die  die hexadezimale Strings in dezimale Zahlenwerte wandelt 
    		//(z.B. HexStringToDezimalValue(char *str);
    
            long leftLongValue = HexStringToDezimalValue(leftValue);
            long rightLongValue = HexStringToDezimalValue(rightValue);
    
            // Überprüfe, ob der Momentane Index wirklich der richtige ist
            if( leftLongValue - 1 != currentPageItem ) {
                  printf("Fehler, der Index ist nicht genau 1 höher");   // Fehler, der Index ist nicht genau 1 höher
            }
            else {
                    currentPageItem++;
                    // verarbeite meinen Wert rightLongValue
    
    		}
    	}
    }	
    	return 0; 
    }
    


  • Diese Zahlen, auf linke Seite fangen von 0x00000000 bis 0x00003fff. Das gilt für jede txt Datei so. aber auf rechte Seite(die Zahlen nach: kommen) für jede txt Datei bisschen unterschiedlich. Aber jede hat selber Regel (also sehen Sie bitte --> und <- )

    ähm, sry, das klingt für mich bisher irgendwie nicht wirklich einleuchtend... Was für regeln? was sollen diese pfeilchen darstellen? womit hast du denn konkret schwierigkeiten?



  • Hallo Andrey,
    Zahlenwerte vor Semikolon sind immer 1 Wert regelmäßig aufsteigen.
    0x00000000:
    0x00000001:
    0x00000002:
    0x00000003: usw. bis 0x00003fff

    Zahlenwerte nach Semikolon sind genauso steigen aber nicht von 0x000… es fang von irgendwelchem Zahl an. Aber es springt immer ein line und erhöht
    zB. (..)
    :0x1b013fff----> (f)
    :0xefa5fff8<-
    :0x1c020000----> (0)
    :0xefa50000<-
    :0x1c020001----> (1)
    :0xefa50008<-
    :0x1c020002----> (2)
    :0xefa50010<-
    :0x1c020003----> (3)



  • mir ist nach wie vor unklar wozu die ganzen pfeilchen da sind...
    sag mal, wo hast du überhaupt diese krumme textdateien her?? 😕
    Wär's nicht einfacher, die benötigte information in irgendeiner geordneteren art und weise abzuspeichern?


Log in to reply