<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[neue Zeile zwischen 2 bestehende einfügen ?]]></title><description><![CDATA[<p>Die Datei sieht folgendermaßen aus:</p>
<pre><code>FT                   /gene_id=&quot;IGI16982646&quot;
FT                   /locus_tag=&quot;Lcho_4083 {UniProtKB/TrEMBL:B1XWY6}&quot;
</code></pre>
<p>Davor und danach sind noch mehr andere Infos gespeichert.<br />
Ich möchte nun zwischen diese zwei Zeilen eine neue Zeile einfügen.</p>
<p>So sieht mein Code im Moment aus:</p>
<pre><code>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=&quot;/gene_id=&quot;;
      needle2='&quot;';
      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&lt;numberOfGenes;i++){
        	  if(buffer == genes[i].getGene_id()){
        		  string test2;
        		  stringstream NumberString;
        		  NumberString &lt;&lt; genes[i].getGcbScore();
        		  string Number = NumberString.str();

//Diese Zeile soll eingefügt werden
        		  test2 = &quot;\nFT                   /gcb=\&quot;&quot; + Number + &quot;\&quot;\n&quot;;
        		  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);
        	  }
          }
      }
}
</code></pre>
<p>Mit ios::app wird die neue Zeile einfach ans Dateiende angefügt, warum funktioniert hier seekp() nicht ?<br />
Ohne app wird an der Stelle &quot;position&quot; in der Datei einfach überschrieben.<br />
Edit: müsste ich wirklich nach jeder neuen Zeile die ich Schreibe, alle anderen verbleibenen neu schreiben &quot;um eins nach unten versetzt&quot; ? (hoffe das ist verständlich)</p>
<p>Edit2: hat sich erledigt, ich öffne einfach eine 2te Datei in welche ich alles neuschreibe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275265/neue-zeile-zwischen-2-bestehende-einfügen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 06:16:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275265.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 12 Oct 2010 09:38:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to neue Zeile zwischen 2 bestehende einfügen ? on Tue, 12 Oct 2010 13:29:13 GMT]]></title><description><![CDATA[<p>Die Datei sieht folgendermaßen aus:</p>
<pre><code>FT                   /gene_id=&quot;IGI16982646&quot;
FT                   /locus_tag=&quot;Lcho_4083 {UniProtKB/TrEMBL:B1XWY6}&quot;
</code></pre>
<p>Davor und danach sind noch mehr andere Infos gespeichert.<br />
Ich möchte nun zwischen diese zwei Zeilen eine neue Zeile einfügen.</p>
<p>So sieht mein Code im Moment aus:</p>
<pre><code>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=&quot;/gene_id=&quot;;
      needle2='&quot;';
      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&lt;numberOfGenes;i++){
        	  if(buffer == genes[i].getGene_id()){
        		  string test2;
        		  stringstream NumberString;
        		  NumberString &lt;&lt; genes[i].getGcbScore();
        		  string Number = NumberString.str();

//Diese Zeile soll eingefügt werden
        		  test2 = &quot;\nFT                   /gcb=\&quot;&quot; + Number + &quot;\&quot;\n&quot;;
        		  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);
        	  }
          }
      }
}
</code></pre>
<p>Mit ios::app wird die neue Zeile einfach ans Dateiende angefügt, warum funktioniert hier seekp() nicht ?<br />
Ohne app wird an der Stelle &quot;position&quot; in der Datei einfach überschrieben.<br />
Edit: müsste ich wirklich nach jeder neuen Zeile die ich Schreibe, alle anderen verbleibenen neu schreiben &quot;um eins nach unten versetzt&quot; ? (hoffe das ist verständlich)</p>
<p>Edit2: hat sich erledigt, ich öffne einfach eine 2te Datei in welche ich alles neuschreibe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1964256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1964256</guid><dc:creator><![CDATA[dak]]></dc:creator><pubDate>Tue, 12 Oct 2010 13:29:13 GMT</pubDate></item></channel></rss>