Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben

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 ???

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; 

}

Geschrieben

so könnte das zerlegen der zeilen aussehen

das kann sicherlich auch noch optimiert werden müsste aber gehen

weiter solltes du entweder cout oder printf verwenden,nicht mal so mal so

es ist auch einfacher mit dem std::string zu arbeiten als mit char pointern

wenn du std::cout und std::string benutzt brauchst du die headerdateien stdio.h und string.h nicht


#include <iostream> // für std::cout 

#include <fstream> // für std::fstream 

#include <string> // für std::string und std::getline 

using namespace std;


void main()

{


	string line;


	ifstream datei;

	datei.open("text.txt");


	if (!datei)

	{

		cout <<"Error File not found!!!"<<endl;

		return;

	}


	char buff[255];

	datei.getline(buff, 255,'\n');

	line = buff;

	while(datei)

	{

		if(line.substr(0, 10)== "PageNumber")

		{

			cout <<line<<endl<<endl;

			datei.getline(buff, 255, '\n');

			line = buff;

			while(line.substr(0,2) == "0x")

			{	

				string hexval1 = line.substr(0, 10);

				//tue was hexto dez

				cout<< hexval1<<endl;

				string hexval2 = line.substr(11 , 10);

				// tue was hex to dez

				cout<<hexval2<<endl;

				datei.getline(buff, 255, '\n');

				line = buff;

			}

		}

		else

		{

			char buff[255];

			datei.getline(buff, 255,'\n');

			line = buff;

		}

	}


	cin.get();

};

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...