<?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[Array speichern]]></title><description><![CDATA[<p>Hi ich wollte mal fragen was notwendig ist um ein Array in eine Datei zu speichern...<br />
Brauch ich da diese Streams??</p>
<p>MfG Straightflush</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/158758/array-speichern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 06:12:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/158758.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 Sep 2006 10:06:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array speichern on Fri, 08 Sep 2006 10:06:10 GMT]]></title><description><![CDATA[<p>Hi ich wollte mal fragen was notwendig ist um ein Array in eine Datei zu speichern...<br />
Brauch ich da diese Streams??</p>
<p>MfG Straightflush</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133533</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Fri, 08 Sep 2006 10:06:10 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Fri, 08 Sep 2006 10:11:05 GMT]]></title><description><![CDATA[<p>Top 1 der FAQ...<br />
Musste das Array in die TStringList Laden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133536</guid><dc:creator><![CDATA[GCoder]]></dc:creator><pubDate>Fri, 08 Sep 2006 10:11:05 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Fri, 08 Sep 2006 11:23:48 GMT]]></title><description><![CDATA[<p>TStringList mach allerdings nur Sinn, wenn es sich um ein Array von Strings handelt.<br />
Ansonsten würde ich mir mal die Standardstreams ansehen.<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39469.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39469.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133593</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 08 Sep 2006 11:23:48 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Fri, 08 Sep 2006 12:38:09 GMT]]></title><description><![CDATA[<p>Hier ein Beispielcode:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
 Artikel alle[2]={NULL};
 Artikel alle2[2]={NULL};
 Artikel art;
 Artikel art2;  //Deklarationen

 art.price=78.9;
 strcpy(art.bezeichnung,&quot;3tlg Dreh-Kipp&quot;);

 art2.price=67.00;
 strcpy(art2.bezeichnung,&quot;4tlg Dreh-Kipp&quot;);
 alle[0]=art;
 alle[1]=art2;//Zuweisung um das Array zu füllen

 fstream File(&quot;test.dat&quot;, ios::out|ios::binary); //Öffnet die Datei test.dat mit dem binärem schreibmodi

 File.write((const char*)&amp;alle, sizeof(alle));//Cast und ab damit in die Datei

 File.close();//Schön brav die Datei schließen

 File.open(&quot;test.dat&quot;,ios::in|ios::binary);//Wieder öffnen (Binär)

 while(File.read((char*)&amp;alle2,sizeof(alle2)))//schleife zum auslesen
    {     for(int x=0;x&lt;2;x++)
                cout&lt;&lt;alle2[x].price&lt;&lt;&quot; &quot;&lt;&lt;alle2[x].bezeichnung&lt;&lt;endl;//Ausgabe Monitor etc.
     }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1133660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133660</guid><dc:creator><![CDATA[Croatiancow]]></dc:creator><pubDate>Fri, 08 Sep 2006 12:38:09 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Sat, 09 Sep 2006 13:37:22 GMT]]></title><description><![CDATA[<p>Hi hab des jetzt aus dem Beispiel kopiert und es scheint auch zu funktionieren...<br />
Hiermal mein Quelltext:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &quot;Programm1.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{

enum Spaltenname{Adresse,Interval,Zeichen};
using namespace std;
// Einen Person-Datensatz definieren

// fstream damit die Datei zuerst schreibend und dann lesend geöffnet werden kann.
fstream File(&quot;Person.dat&quot;, ios::out|ios::binary);
if (File.is_open())
{
    // Nur zwei Datensätze schreiben.
    // Hier wäre eine Fehlerprüfung angebracht
char* a[2][3] = {{&quot;http://www.adresse1.html&quot;,&quot;10&quot;,&quot;160&quot;},{&quot;http://www.adresse2.de/&quot;,&quot;15&quot;,&quot;140&quot;}};
Label2-&gt;Caption = a[1][Adresse];
        // Aktuelle Person in der Datei speichern.
        File.write((const char*)&amp;a, sizeof(a));

    File.close();   // Datei schließen
}
// Datei zum Lesen öffnen.
File.open(&quot;Person.dat&quot;, ios::in|ios::binary);
if (File.is_open())
{
   //enum Spaltenname{Adresse,Interval,Zeichen};
char* b[2][3];
    while (File.read((char*)&amp;b, sizeof(b)))
    Label1-&gt;Caption = b[0][Adresse];
    }

}
//---------------------------------------------------------------------------
</code></pre>
<p>jetzt hab ich noch ein Kleines Programm geschrieben mit welchem ich ausschließlich aus der Datei lesen will. leider ändert sich des caption nicht:</p>
<p>hiermal der Quelltext von dem zweiten Programm:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &quot;Programm2.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
enum Spaltenname{Adresse,Interval,Zeichen};
using namespace std;
// Einen Person-Datensatz definieren

// fstream damit die Datei zuerst schreibend und dann lesend geöffnet werden kann.
fstream File(&quot;Person.dat&quot;, ios::out|ios::binary);

// Datei zum Lesen öffnen.
File.open(&quot;Person.dat&quot;, ios::in|ios::binary);
if (File.is_open())
{
char* b[2][3];
    while (File.read((char*)&amp;b, sizeof(b)))
    Label1-&gt;Caption = b[0][Adresse];
    }

}
//---------------------------------------------------------------------------
</code></pre>
<p>Ich kann einfach keinen Fehler finden!! Und eine Fehlermeldung bekomme ich auch nicht!!Komischerweise scheint es ja im ersten programm zu funktionnieren.</p>
<p>Kann mir jemand helfen??</p>
<p>MfG Straightflush</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1134230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1134230</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Sat, 09 Sep 2006 13:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Sun, 10 Sep 2006 09:24:40 GMT]]></title><description><![CDATA[<p>kann mir keine sagen wo mein (vermutlich Denk-) Fehler liegt??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1134528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1134528</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Sun, 10 Sep 2006 09:24:40 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Sun, 10 Sep 2006 11:52:49 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>du hast bereits hier</p>
<p>Croatiancow schrieb:</p>
<blockquote>
<p>Artikel alle[2]={NULL};</p>
</blockquote>
<p>Straightflush schrieb:</p>
<blockquote>
<p>char* a[2][3]</p>
</blockquote>
<p>einenj entscheidenden Unterschied.<br />
Das Original arbeitet mit einem Array von Heapobjekten, deren sizeof() auch die tatsächliche Größe ergibt.<br />
Du aber arbeitest mit einem Array von Pointern auf String-Literalen. Da wird bei sizeof nur der Platz für die Pointer berechnet.<br />
Deshalb dürfte schon allein die erstellte Datei Person.dat nicht richtig ist.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1134595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1134595</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 10 Sep 2006 11:52:49 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Mon, 11 Sep 2006 08:39:38 GMT]]></title><description><![CDATA[<p>Ich hab nun mal alles nochmal verändert und arbeite nun mit einem struct</p>
<p>Hier ist der Quelltext von dem Programm welches die Datei schreibt und gleich ausließt... funktioniert super.</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &quot;Programm1.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
using namespace std;
TForm1 *Form1;
struct Eintrag
{
char adresse[40];
int zeichen;
int interval;
};

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Eintrag first;
first.zeichen = 126;
first.interval = 15;
strcpy(first.adresse,&quot;www.google.de&quot;);

// fstream damit die Datei zuerst schreibend und dann lesend geöffnet werden kann.
fstream File(&quot;Person.dat&quot;, ios::out|ios::binary);
if (File.is_open())
{
    // Nur zwei Datensätze schreiben.
    // Hier wäre eine Fehlerprüfung angebracht

Label2-&gt;Caption = first.adresse;
        // Aktuelle Person in der Datei speichern.
        File.write((const char*)&amp;first, sizeof(first));

    File.close();   // Datei schließen
}
// Datei zum Lesen öffnen.
File.open(&quot;Person.dat&quot;, ios::in|ios::binary);
if (File.is_open())
{

Eintrag second;
    while (File.read((char*)&amp;second, sizeof(second)))
    Label1-&gt;Caption = second.adresse;
    }

}
//---------------------------------------------------------------------------
</code></pre>
<p>Und hier ist das Programm welches nur lesen soll: in dem Fall erhalte ich als ausgabe 1310016.</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &quot;Programm2.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
using namespace std;
TForm1 *Form1;
struct Eintrag
{
char adresse[40];
int zeichen;
int interval;
};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
// fstream damit die Datei zuerst schreibend und dann lesend geöffnet werden kann.
fstream File(&quot;Person.dat&quot;, ios::out|ios::binary);

// Datei zum Lesen öffnen.
File.open(&quot;Person.dat&quot;, ios::in|ios::binary);
if (File.is_open())
{

Eintrag second;
    File.read((char*)&amp;second, sizeof(second));
    Label1-&gt;Caption = second.zeichen;
    }

}
//---------------------------------------------------------------------------
</code></pre>
<p>Verändere ich das lesen zu einer while Schleife erhalte ich wieder kein anderes Caption (sprich das Caption &quot;Label1&quot; bleibt).</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &quot;Programm2.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
using namespace std;
TForm1 *Form1;
struct Eintrag
{
char adresse[40];
int zeichen;
int interval;
};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
// fstream damit die Datei zuerst schreibend und dann lesend geöffnet werden kann.
fstream File(&quot;Person.dat&quot;, ios::out|ios::binary);

// Datei zum Lesen öffnen.
File.open(&quot;Person.dat&quot;, ios::in|ios::binary);
if (File.is_open())
{

Eintrag second;
    while(File.read((char*)&amp;second, sizeof(second)))   //&lt;--- Veränderung!!!!
    Label1-&gt;Caption = second.zeichen;
    }

}
//---------------------------------------------------------------------------
</code></pre>
<p>Ich hab keine Ahnung was ich jetzt noch machen soll...<br />
Muss es etwas ein array aus struct Objekten sein?!</p>
<p>Ich wäre wirklich sehr dankbar wenn mir jemand nen guten Tipp gibt.</p>
<p>MfG Straightflush</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1134969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1134969</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Mon, 11 Sep 2006 08:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Mon, 11 Sep 2006 15:33:42 GMT]]></title><description><![CDATA[<p>Kann mir echt keiner helfen?? Ich bekomme nicht raus wo der Fehler liegt!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135304</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Mon, 11 Sep 2006 15:33:42 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Mon, 11 Sep 2006 16:03:58 GMT]]></title><description><![CDATA[<p>Geh doch mal mit dem Debugger durch und schau nach was wirklich eingelesen wird.<br />
Wozu soll diese while-Schleife eigentlich gut sein? Die würde doch bei dir so lange durchlaufen, bis du einen Lesefehler hast, und dann steht in deiner Caption nur noch Müll drin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135329</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 11 Sep 2006 16:03:58 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Mon, 11 Sep 2006 16:20:36 GMT]]></title><description><![CDATA[<p>und wie geht des bei Borland</p>
<p>Habe bemerkt das wenn ich die Datei mim zweiten programm lesen will die Datei 0byte groß wird...</p>
<p>Wie kann das sein??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135340</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Mon, 11 Sep 2006 16:20:36 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Mon, 11 Sep 2006 16:41:57 GMT]]></title><description><![CDATA[<p>Da ist wohl nichts rausgeschrieben worden.<br />
Hier nochmal der Hinweis auf den Debugger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135354</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 11 Sep 2006 16:41:57 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Mon, 11 Sep 2006 16:45:29 GMT]]></title><description><![CDATA[<p>Hab das problem mit der 0byte datei behoben weiß leider nicht genau wie<br />
ich hab das ganze jetzt in einem Programm geschrieben was einfacher zum lesen ist...<br />
Ich bekomme in diesem Fall jedoch nur wirre Zeichen als Ausgabe in Label2...</p>
<p>Hier mal der Code von dem neuen Programm:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &quot;Programm1.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
using namespace std;
TForm1 *Form1;
struct Eintrag
{
char adresse[40];
int zeichen;
int interval;
};

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Eintrag first;
first.zeichen = 1111;
first.interval = 15;
strcpy(first.adresse,&quot;www.google.de&quot;);

// fstream damit die Datei zuerst schreibend und dann lesend geöffnet werden kann.
fstream File(&quot;Testdatei&quot;, ios::out|ios::binary);
if (File.is_open())
{

Label1-&gt;Caption = first.adresse;

    File.write((const char*)&amp;first, sizeof(first));

    File.close();   // Datei schließen
}

fstream File2(&quot;Testdatei&quot;, ios::in|ios::binary);

// Datei zum Lesen öffnen.
File2.open(&quot;Testdatei&quot;, ios::in|ios::binary);
if (File2.is_open())
{

Eintrag second;
    File2.read((char*)&amp;second, sizeof(second));
    Label2-&gt;Caption = second.adresse;
    }
 File2.close();

}
//---------------------------------------------------------------------------
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1135358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135358</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Mon, 11 Sep 2006 16:45:29 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Mon, 11 Sep 2006 16:57:27 GMT]]></title><description><![CDATA[<p>Lass bitte mal das hier weg</p>
<pre><code class="language-cpp">File2.open(&quot;Testdatei&quot;, ios::in|ios::binary);
</code></pre>
<p>Du hast die Datei ja schon im Konstruktor geöffnet. Dann verlege den Code mal aus OnCreate raus. Entweder in einen Click-Event oder auch in OnShow.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135366</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 11 Sep 2006 16:57:27 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Mon, 11 Sep 2006 17:47:06 GMT]]></title><description><![CDATA[<p>Danke jetzt klappts!!! Kann sogar im OnCreat bleiben!!!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135401</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Mon, 11 Sep 2006 17:47:06 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Mon, 11 Sep 2006 18:08:38 GMT]]></title><description><![CDATA[<p>Versuche, wenns irgend geht OnCreate und OnDestroy nicht zu nutzen, sondern statt dessen besser Destruktor und Konstruktor. Es gab da irgendwo mal einen Artikel wo beschrieben wurde warum das so ist.<br />
Hier ist der ja<br />
<a href="http://support.borland.com/thread.jspa?messageID=11735" rel="nofollow">http://support.borland.com/thread.jspa?messageID=11735</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135412</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 11 Sep 2006 18:08:38 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Tue, 12 Sep 2006 09:27:03 GMT]]></title><description><![CDATA[<p>Hi ich habe noch eine Frage...<br />
Wenn ich in meine Datei ein Array aus Struct Elementen schreibe,<br />
beim rauslesen aber vorher nicht weiß wie groß das array ist wie kann ich dann vorher herausfinden wie groß das array sein muss in das geschrieben wird?</p>
<p>Meine Ideen waren:<br />
- Vorher ein Int-Wert abspeichern der angibt wieviele Elemente das Array hat und aus dieser Angabe das neue Array zu erzeugen.</p>
<p>- Erst alles in ein übergroßes Array zu laden in dem aufjedenfall alle reinpassen dann die Elemente zählen (oder beim auslesen mitzählen) ein zweites array erzeugen,<br />
die Elemente kopieren, dann das Buffer-Array löschen</p>
<p>Was haltet ihr von dieser Idee???<br />
array[] funktioniert leider nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>MfG Straightflush</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135683</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Tue, 12 Sep 2006 09:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Tue, 12 Sep 2006 09:54:30 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Meine Ideen waren:<br />
- Vorher ein Int-Wert abspeichern der angibt wieviele Elemente das Array hat und aus dieser Angabe das neue Array zu erzeugen.</p>
</blockquote>
<p>Ist okay</p>
<blockquote>
<p>- Erst alles in ein übergroßes Array zu laden in dem aufjedenfall alle reinpassen dann die Elemente zählen (oder beim auslesen mitzählen) ein zweites array erzeugen,<br />
die Elemente kopieren, dann das Buffer-Array löschen</p>
</blockquote>
<p>Ist schlecht, weil du dann wieder eine (zwar große) Maximalgröße und dazu noch Kopieroverhead hast</p>
<p>Die eigentliche Lösung ist die Verwendung eines dynamischen Arrays. Das VCL-Mittel dafür ist <em>DynamicArray</em> (siehe Suche hier im BCB-Forum), ich empfehle dir aber das wesentlich elegantere und umfangreichere Mittel aus dem C++ Standard : <em>std::vector</em> (siehe Suche im C++ Forum, sowie den Magazin-Artikel über die STL-Container).</p>
<p>Bei beitem hast du am Anfang ein leeres Array. Mit einer while-Schleife liest du solange ein, bis du am Ende der Datei bist. Bei jedem Durchgang liest du die Werte für ein Element ein und hängst es an das Array.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1135713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1135713</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 12 Sep 2006 09:54:30 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Wed, 13 Sep 2006 19:58:48 GMT]]></title><description><![CDATA[<p>Habs jetzt mit der ersten Methode versucht...<br />
leider wird nur der Intergerwert ausgelesen...</p>
<p>Ich vermutet stark das es etwas damit zu tun hat das ich String-Wert abspeichern will... kann es sein das sich nur char binär abspeichern lassen===</p>
<p>hier mal der Quelltext von dem Programm das in die Datei schreibt:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#pragma hdrstop
using namespace std;

#pragma argsused
int main(int argc, char* argv[])
{
String Searchword[]={&quot;hallo&quot;,&quot;hallo1&quot;,&quot;hallo2&quot;,&quot;hallo3&quot;};

fstream File(&quot;List.dat&quot;, ios::out|ios::binary);
if (File.is_open())
{
    int Size = sizeof(Searchword)/sizeof(Searchword[0]);

    File.write((const char*)&amp;Size, sizeof(Size));

    for(int i=0; i &lt; sizeof(Searchword)/sizeof(Searchword[0]); i++)
    {
    String Buffer = Searchword[i];
    File.write((const char*)&amp;Buffer, sizeof(Buffer));
    }

    File.close();   // Datei schließen
}

system(&quot;PAUSE&quot;);
return 0;
}
</code></pre>
<p>Hier von dem Programm das rauslesen soll...</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;2
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#pragma hdrstop
using namespace std;

#pragma argsused
int main(int argc, char* argv[])
{

fstream File2(&quot;List.dat&quot;, ios::in|ios::binary);
if (File2.is_open())
{

int Size;
    File2.read((char*)&amp;Size, sizeof(Size));
    cout &lt;&lt; &quot;Array-Size = &quot;&lt;&lt;Size&lt;&lt;endl;
    //String *Searchword = new String[Size];
    for(int i=0;i &lt; Size; i++)
    {
    String Buffer;
    File2.read((char*)&amp;Buffer, sizeof(Buffer));
    cout &lt;&lt; Buffer.c_str() &lt;&lt; &quot;#&quot; &lt;&lt; endl;
    }

    }
 File2.close();
system(&quot;PAUSE&quot;);

return 0;
}
//---------------------------------------------------------------------------
</code></pre>
<p>oder liegt mein Fehler woanders???</p>
<p>wenn es an den strings liegt ist es dann möglich so etwas</p>
<pre><code class="language-cpp">char test[40];
</code></pre>
<p>in ein array zu packen?? ist ja schon ein array an sich...<br />
oder muss ich dann eine zweite dimension dazu nehmen??</p>
<p>Schonmal vielen Dank für die Antworten!!<br />
MfG Straightflush</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136938</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Wed, 13 Sep 2006 19:58:48 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Thu, 14 Sep 2006 08:14:44 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Du hast da oben ein Array von AnsiStrings. Wenn du die binär rausschreiben willst, mußt du nicht nur die Größe des Array, sondern auch die Länge jedes Einzelstrings mit ausgeben.</p>
<pre><code class="language-cpp">File.write((const char*)&amp;Buffer, sizeof(Buffer));
</code></pre>
<p>Das hier geht schon gar nicht. Du castest ein AnsiString in ein const char*. Ich weiß jetzt nicht was dabei rauskommt, aber mit Sicherheit nicht das was du erwartest. sizeof(Buffer) gibt dir auch nicht die Länge des Strings, sondern nur die Größe einer AnsiStringinstanz.<br />
Einen AnsiString kann man so rausschreiben.</p>
<pre><code class="language-cpp">int len = Buffer.Length();
File.write((const char*)&amp;len, sizeof(len));
File.write(Buffer.c_str(), len);
</code></pre>
<p>und so mußt du es auch einlesen. Erst die Länge, dann die Anzahl der Bytes in einen char* Puffer un zu Schluß das in den AnsiString.<br />
Bsp.</p>
<pre><code class="language-cpp">int len;
File2.read((char*)&amp;len, sizeof(len));
char* buffer = new char[len+1];
File2.read((buffer,len);
buffer[len] = '\0';
String str = buffer;
delete[] buffer;
</code></pre>
<p>Du kannst auch alles im Textmodus rausschreiben. Dann wird zwar die Datei etwas größer und von jedem lesbar. Allerdings vereinfacht sich das Lesen und schreiben stark.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137053</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 14 Sep 2006 08:14:44 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Fri, 22 Sep 2006 11:51:39 GMT]]></title><description><![CDATA[<p>Habs so versucht...<br />
Bekomme leider immer die Meldung &quot;Speicheradresse muss verwendet werden&quot;...</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
#include &lt;fstream&gt;
using namespace std;
#include &lt;iostream&gt;
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
String Searchword[]={&quot;hallo&quot;,&quot;hallo1&quot;,&quot;hallo2&quot;,&quot;hallo3&quot;};
fstream File(&quot;List.dat&quot;, ios::out|ios::binary);
if (File.is_open())       // Wenn Datei geöffnet ist
{
    int Size = sizeof(Searchword)/sizeof(Searchword[0]); // Anzahl der Suchwörter berechnen
    File.write((const char*)&amp;Size, sizeof(Size));        // und in Datei abspeichern

    for(int i=0; i &lt; sizeof(Searchword)/sizeof(Searchword[0]); i++)//Anzahl der Durchläufe entspricht Anzahl der Suchwörter
    {
    cout &lt;&lt; Searchword[i].c_str() &lt;&lt; &quot; hat die laenge: &quot; &lt;&lt; Searchword[i].Length() &lt;&lt; endl;
    int len = Searchword[i].Length();
    File.write((const char*)&amp;len, sizeof(len));  // Größe des Wortes in Datei speichern
    File.write(&amp;Searchword[i].c_str(), len);     // Wort in char und dann in Datei speichern   &lt;-------- HIER IST DIE FEHLERZEILE 
    cout &lt;&lt; Searchword[i].c_str() &lt;&lt; &quot; wurde mit der Laenge: &quot; &lt;&lt; len &lt;&lt; &quot; in die Datei gespeichert&quot; &lt;&lt; endl;
    }

    File.close();   // Datei schließen
}

system(&quot;PAUSE&quot;);  return 0;
        }
//---------------------------------------------------------------------------
</code></pre>
<p>Kann mir jemand helfen???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142477</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Fri, 22 Sep 2006 11:51:39 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Fri, 22 Sep 2006 12:02:00 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>AnsiString::c_str() liefert dir doch schon einen Pointer, da brauchst du nicht extra die Adresse zu holen</p>
<pre><code class="language-cpp">File.write(Searchword[i].c_str(), len);
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142482</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 22 Sep 2006 12:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Fri, 22 Sep 2006 12:04:06 GMT]]></title><description><![CDATA[<p>Lass einfach das &amp; vor Searchword weg. c_str() gibt dir ja schon ein const char*.<br />
[edit]Heute bin ich wohl immer zu spät. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> [edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142484</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 22 Sep 2006 12:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Fri, 22 Sep 2006 14:14:22 GMT]]></title><description><![CDATA[<p>Super Danke jetzt funktionierts!!!!!</p>
<p>Hab noch ne Frage zu dem '/0'...<br />
Wieso muss das an das Ende des Strings angefügt werden bzw warum wird das nicht mit abgespeichert???</p>
<p>und hier habe ich noch eine Frage:</p>
<pre><code class="language-cpp">if (File2.is_open())
{

int len;
int Size;
    File2.read((char*)&amp;Size, sizeof(Size));
    cout &lt;&lt; &quot;The Size of the Array is: &quot;&lt;&lt;Size&lt;&lt;endl;
    String* Searchword = new String[Size+1];
    for(int i=0;i &lt; Size; i++)
    {
    File2.read((char*)&amp;len, sizeof(len));
    char* buffer = new char[len+1];
    File2.read(buffer,len);
    buffer[len] = '\0';
    Searchword[i] = buffer;
    delete[] buffer;
    cout &lt;&lt; Searchword[i].c_str() &lt;&lt; endl;
    }
    cout &lt;&lt; Searchword[0].c_str();           &lt;----- WARUM GEHT DAS
    }
 File2.close();
    cout &lt;&lt; Searchword[0].c_str();&lt;------ DAS ABER NICHT?!
</code></pre>
<p>MfG Straightflush</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142602</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Fri, 22 Sep 2006 14:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Fri, 22 Sep 2006 14:22:39 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int len;
int Size;
fstream File2(&quot;List.dat&quot;, ios::in|ios::binary);
if (File2.is_open())
{
    File2.read((char*)&amp;Size, sizeof(Size));
    cout &lt;&lt; &quot;The Size of the Array is: &quot;&lt;&lt;Size&lt;&lt;endl;
}
    String* Searchword = new String[Size+1];

    if (File2.is_open())
        {
    for(int i=0;i &lt; Size; i++)
    {
    File2.read((char*)&amp;len, sizeof(len));
    char* buffer = new char[len+1];
    File2.read(buffer,len);
    buffer[len] = '\0';
    Searchword[i] = buffer;
    delete[] buffer;
    cout &lt;&lt; Searchword[i].c_str() &lt;&lt; endl;
    }
    cout &lt;&lt; Searchword[0].c_str();
    }
 File2.close();
    cout &lt;&lt; Searchword[0].c_str();
</code></pre>
<p>so gehts!! gibts da noch ne elegantere lösung???<br />
kann ich des irgendwie als global deklarieren??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142612</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Fri, 22 Sep 2006 14:22:39 GMT</pubDate></item><item><title><![CDATA[Reply to Array speichern on Fri, 22 Sep 2006 14:33:55 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>- &quot;geht nicht&quot; ist keine ausreichende Fehlerbeschreibung<br />
- Rücke deinen Code vernünftig ein, um den lesbarer zu machen<br />
- jedes Symbol muß in dem aktuellen Scope deklariert sein, um ihn zu benutzen. Deshalb ist klar, warum hier der Kompiler den Ausdruck nicht kennt</p>
<pre><code class="language-cpp">if (...)
{
  String* Searchword = new String[Size+1];
  ...
  cout &lt;&lt; Searchword[0].c_str(); // im richtigen Scope
  ...
  if (...)
  {
    cout &lt;&lt; Searchword[0].c_str(); // immer noch im richtigen Scope  
  }
}
cout &lt;&lt; Searchword[0].c_str(); // nicht mehr im richtigen Scope, Kompiler kennt das nicht mehr
</code></pre>
<p>das sind aber alles Grundkenntnisse von C++, die du kennen solltest.<br />
Wenn nicht, dann arbeite ein passendes Tutorial durch.</p>
<p>/Edit :</p>
<blockquote>
<p>kann ich des irgendwie als global deklarieren??</p>
</blockquote>
<p>Bitte nicht. Globale Variablen sollten nur wenn wirklich nötig verwendet werden.<br />
Benutze Funktionsparameter und (statische) Klassenmember stattdessen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142623</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 22 Sep 2006 14:33:55 GMT</pubDate></item></channel></rss>