Problem beim einlesen und verarbeiten eines langen Strings



  • Hallo zusammen,

    vorweg ein grosses Lob an euer Forum, ich habe schon viele wertvolle Informationen hier gefunden. Jetzt stehe ich vor einen sehr speziellen Problem und hoffe das ihr mir weiterhelfen könnt. Ich lese einen String von einer Webseite der wie folgt strukturiert ist:

    307370679525016016 1194351000 3600 Monstergarage#
    307370679525016017 1194354600 4200 Monsterhaus#
    307370679525016018 1194358800 1500 So wird's gemacht!#
    

    erklaereung: (event_id) (uni_timestamp) (dauer_in_sek). der Zeiger what_i_have_read zeigt auf das erste Zeichen dieser Zeichenkette

    Ich versuche an die eventid der Aktuell laufenden Sendung zu kommen. Dies mache ich folgendermassen:

    do{	
    
    	//get the first numer
    	for(i = 0; *what_i_have_read != ' '; i++){
    
    		event_id[i] = *what_i_have_read;
    		epg++;
    	}
    	event_id[i] = '\0';							
    	what_i_have_read++;
    
    	for(i = 0; *what_i_have_read != ' '; i++){
    		tv_time[i] = *what_i_have_read;
    		what_i_have_read++;
    	}
    	tv_time[i] = '\0';
    	starttime = atoi(tv_time);
    	what_i_have_read++;
    
    	for(i = 0; *what_i_have_read != ' '; i++){
    		duration[i] = *what_i_have_read;
    		what_i_have_read++;
    	}
    	duration[i] = '\0';
    	duration2 = atoi(duration);
    
    	endtime = starttime + duration2;
    
    	while(*what_i_have_read != '#'){
    		what_i_have_read++;
    	}
    
    	what_i_have_read++;	
    
    	if((time(NULL) >= starttime) && (time(NULL) <= endtime)){
    		epg_found = 1;
    	}
    
    }while(!((time(NULL) >= starttime) && (time(NULL) <= endtime)));
    

    So wie ich es mache ist es bestimmt extrem unkonventionell, zumal es ein Problem gibt wenn es keine Informationen zur aktuellen Sendung gibt. Denn dann stürzt das Programm ab. Ich könnte jedesmal bevor ich den zeiger inrementierte überpreufen ob jetzt das '\0' kommt. Aber das scheint mir alles ein ziemliches hingebiege zu werden. Deswegen würde mich sehr interessieren wie man dieses Problem professionell ausprogrammieren würde.

    Vielen dank

    Gruß

    Kolja



  • Was bekommst du denn, wenn "es keine Informationen zur aktuellen Sendung gibt"? Einen leeren String - oder einen (unvollständigen) Dummy-Datensatz? Da könntest du vermutlich am Anfang der Schleife abfangen, ob du überhaupt Daten hast.



  • dann bekomme ich genauso etwas:

    307370679525016016 1194351000 3600 Monstergarage#
    307370679525016017 1194354600 4200 Monsterhaus#
    307370679525016018 1194358800 1500 So wird's gemacht!#
    307370679525016019 1194360300 1800 Technik des 21. Jahrhunderts - Fluch oder Segen#
    307370679525016020 1194362100 3300 Brainiac#
    307370679525016021 1194365400 3600 Scrapheap Challenge - Showdown auf dem Schrottplatz#
    307370679525016022 1194369000 3600 Overhaulin' - Aufgemotzt und Abgefahrn#
    307370679525016023 1194372600 3900 American Chopper#
    307370679525016024 1194376500 3300 American Chopper#
    307370679525016025 1194379800 3600 Overhaulin' - Aufgemotzt und Abgefahrn#
    307370679525016026 1194383400 3900 Big Daddy - Der Kustomizer#
    307370679525016027 1194387300 3600 DMAX DOKU#
    307370679525016028 1194390900 120 DMAX - Der Tag#
    307370679525016029 1194391020 3480 American Chopper#
    

    nur in der Liste ist einfach kein Datensatz zur aktuellen Sendung. Ist also nicht zu erkennen OHNE vorher für jede Sendung die Start und Endzeit zu bestimmen und mit der aktuellen Zeit zu vergleichen, und genau das mache ich ja



  • Sind die Zeitangaben denn sortiert? Wenn ja, mußt du nur suchen, bis die Endzeit in der Zukunft liegt:

    do
    {
      ...
    }
    while(endzeit<time(NULL));
    


  • leider sind sie das nicht immer, deswegen geht das auch nicht



  • Na dann sollte spätestens dann Schluß sein, wenn du das Ende der Eingaben erreicht hast - while(epg_found==0 && *what_i_have_read!='\0'); (ich hoffe mal nicht, daß am Ende eine halbfertige Datenzeile angehängt wird)



  • 🤡

    so einfach kann es doch sein, na wo du recht hast hast du recht. solange mein buffer gross genug endet das ganze naturlich nicht mit einer halben zeile und dann funktioniert das so. grosses dankeschön


Anmelden zum Antworten