neue Zeile zwischen 2 bestehende einfügen ?



  • Die Datei sieht folgendermaßen aus:

    FT                   /gene_id="IGI16982646"
    FT                   /locus_tag="Lcho_4083 {UniProtKB/TrEMBL:B1XWY6}"
    

    Davor und danach sind noch mehr andere Infos gespeichert.
    Ich möchte nun zwischen diese zwei Zeilen eine neue Zeile einfügen.

    So sieht mein Code im Moment aus:

    char buffer3[500];
    string meta_cstring;
    fstrm2.open(argv[1], ios::out | ios::in | ios::app );
    while(!fstrm2.eof()){
    //Datei Zeile für Zeile einlesen
          fstrm2.getline(buffer3,500);
          position = fstrm2.tellg();
          meta_cstring = buffer3;
    
    //find gene_id
          needle1="/gene_id=";
          needle2='"';
          found1 = meta_cstring.find(needle1);
          if(found1!=std::string::npos){
    
        	  found1 = found1+10;
        	  found2 = meta_cstring.find(needle2,found1);
        	  length2 = found2-found1;
        	  length = meta_cstring.copy(buffer,length2,found1);
        	  buffer[length]='\0';
    
    //find the corresponding gene in array
        	  for(int i=0;i<numberOfGenes;i++){
            	  if(buffer == genes[i].getGene_id()){
            		  string test2;
            		  stringstream NumberString;
            		  NumberString << genes[i].getGcbScore();
            		  string Number = NumberString.str();
    
    //Diese Zeile soll eingefügt werden
            		  test2 = "\nFT                   /gcb=\"" + Number + "\"\n";
            		  int lengthTest2;
    //seqan length gibt die Länge des strings zurück
    
            		  lengthTest2 = seqan::length(test2);
            		  fstrm2.seekp(position);
            		  fstrm2.write(test2.c_str(),lengthTest2);
            		  fstrm2.seekg(position);
            	  }
              }
          }
    }
    

    Mit ios::app wird die neue Zeile einfach ans Dateiende angefügt, warum funktioniert hier seekp() nicht ?
    Ohne app wird an der Stelle "position" in der Datei einfach überschrieben.
    Edit: müsste ich wirklich nach jeder neuen Zeile die ich Schreibe, alle anderen verbleibenen neu schreiben "um eins nach unten versetzt" ? (hoffe das ist verständlich)

    Edit2: hat sich erledigt, ich öffne einfach eine 2te Datei in welche ich alles neuschreibe.


Anmelden zum Antworten