Datenliste mit mehr als nur zwei Werten?



  • Mahlzeit,

    haette da'n Problem fuer Euch:
    Das Programm untersucht hier Tags in einem file (hier html) und speichert dann (im Moment) (fast) jeden aufgehenden Tag in einer map (multimap ist so erstmal nicht mehr noetig), und!! jeden zugehenden Tag in einer anderen map. In den maps wird als Schluessel der Wert ZeichenNr.ZeileNr als double (erst hinkonstruiert, und dann) geseichert.
    Hier ergibt sich folgendes Problem: der erste double-Wert geht noch in Ordnung, alle weiteren werden extrem grosszuegig gerundet (liegt nicht am "Hinkonstruierer", sondern vermutlich an der map??)
    Da ich des hinkonstruierens nun ein wenig muede bin, nun die alles entscheidende Frage:
    Gibt es eine Moeglichkeit, folgende Daten sozusagen in "einer Zeile", also zusammengehoerig zu speichern? Datenstruktur: <unsigned long> <unsigned long> <string()> <bool>?

    Falls es interessiert, hier der Code (!!Anfaenger!!)

    /* ## Dateiinhalt ##		*/
    while (quelle.get(c)) {
    
     if(c != '\t' && c != ' ' && c != '\n')
        ++zeichenzahl;
    
     char &a = c;		// unglücklicher Konstrukt um Zeich zu sammeln
     int b = strTOint(a);
    
     if (c == '\n'){
       ++zeilenzahl;
       smpl.clear();           // smpl = stringObjekt um Tags zu erkennen
    		}
     else{
    	//**  		html-Mode		**//
      if(tildeShrt==htm.FEshrt || tildeLng==htm.FElng){
         if(c == '<' && !JS){
           smpl.clear();
           tag = true;
           tagstart = true;
           inTagV = false;
         }
         else{
           if(tag){
             signed int cnct = NonClsngTags.size();
           	while(cnct--)	// alle Definitionen
                if(smpl == NonClsngTags[cnct])
                   inTagV = true;   // inTagV hier als zweckentfremdeter Schalter
                if(tagend == false && inTagV == false && (c == ' ' || c =='>')){
                   TAGS.insert(pair<double, string>(makeS_L(zeichenzahl,zeilenzahl),smpl)); // Zeichen-Zeilen-Kombi+StartTag einfügen
                   inTagV = true;
    	      }
                if(tagend == true && (c == ' ' || c =='>')){
     	       cTAGS.insert(pair<double, string>(makeS_L(zeichenzahl,zeilenzahl),smpl)); 	// Zeichen-Zeilen-Kombi+EndTag einfügen
                   tagend = false;
                }
    	   ++tlngth;
    	   if(tagstart == true && c == '/')
    	      tagend = true;
    	   if(c == '>'){
    	      ++tagzahl;
    	      tlngth = 0;
    	      tag = false;
    	      smpl.clear();
    	  }
    	  else
    	      if(c != '/')
    		smpl.append(intTOstr(b));
      }
     }
    }
    

    Weiter unten werden dann die beiden Tags mit folgendem Aufruf zur Auswertung gebracht:

    compTags(TAGS,cTAGS,"Tags die nicht geschlossen werden",zeichenzahl);
    

    Hier noch die Funktion <double> makeS_L(<unsigned long>,<unsigned long>)

    double makeS_L(long unsigned sign,long unsigned line){
    	unsigned long hl = line;
    	double mdz = 100000;    // kann also bis 99999 Zeilen
     	double dez = line / mdz;	
    	double give_back = sign + dez;
    	return give_back;
    }
    

    Danke schon mal,
    achim


Anmelden zum Antworten