<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Quick .dat question</title>
		<link>http://www.allegro.cc/forums/view/590901</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 09 Apr 2007 15:08:29 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Howdy,</p><p>OK, so I figured teh problem with my .dat files but I encountered another one. I am doing this:</p><div class="source-code snippet"><div class="inner"><pre>ofstream file<span class="k2">;</span>

<span class="k1">int</span> noob<span class="k3">=</span><span class="n">50</span><span class="k2">;</span>

file.open<span class="k2">(</span><span class="s">"thingy.dat"</span><span class="k2">)</span><span class="k2">;</span>
file <span class="k3">&lt;</span><span class="k3">&lt;</span> noob <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
</pre></div></div><p>

Just to make teh file (test program)<br />But now I want to access the variable &quot;noob&quot; from .dat file &quot;file&quot; in a different program. How do I do that? I want to use textout_ex() to display the &quot;noob&quot; variable from &quot;file&quot;.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (blargmob)</author>
		<pubDate>Sat, 07 Apr 2007 06:19:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just a heads up. On this site, dat files refer to datafiles created by the grabber. <br />What you have is a simple text file. Please don&#39;t call it a dat file. Also, make life simpler and don&#39;t use text files. </p><p>save
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a> <span class="k3">*</span>pfile <span class="k3">=</span> NULL<span class="k2">;</span>

pfile <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span> <span class="s">"thingy.dat"</span>, <span class="s">"w"</span> <span class="k2">)</span><span class="k2">;</span> <span class="c">//, "wp" ); // if you want it packed</span>

<a href="http://www.allegro.cc/manual/pack_iputl" target="_blank"><span class="a">pack_iputl</span></a><span class="k2">(</span> <span class="k1">long</span> value, pfile <span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/pack_fclose" target="_blank"><span class="a">pack_fclose</span></a><span class="k2">(</span> pfile <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

load
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a> <span class="k3">*</span>pfile <span class="k3">=</span> NULL<span class="k2">;</span>

pfile <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span> <span class="s">"thingy.dat"</span>, <span class="s">"r"</span> <span class="k2">)</span><span class="k2">;</span> <span class="c">//, "rp" ); // if you want it packed</span>

<span class="k1">long</span> value <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_igetl" target="_blank"><span class="a">pack_igetl</span></a><span class="k2">(</span> pfile <span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/pack_fclose" target="_blank"><span class="a">pack_fclose</span></a><span class="k2">(</span> pfile <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Sat, 07 Apr 2007 11:26:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you want to access variables from a file, <a href="http://www.allegro.cc/manual/api/configuration-routines/">you probably want to use config files.</a> You can read/save variables from/to a config file. You have to rename the variables in the config file. Of course you can use same names as in your program, but that&#39;s not automatic.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Mon, 09 Apr 2007 01:47:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Or, in case you are familiar with XML, you might consider TinyXML (but then, if you&#39;re not familiar with XML, or it&#39;s just a few single variables you need to save / load, XML is way overkill of course).<br />Otherwise, go with DanielH&#39;s or Johan Halmén&#39;s solutions.</p><p>You can, of course, use C++ iostreams to do the same thing, but there are some caveats:<br />- The stream operators &lt;&lt; and &gt;&gt; format everything to strings, so they are not your first choice for storing raw variables. Use the ostream::put() and ostream::write() functions to output binary data, and istream::get() and istream::read() for raw input. <a href="http://www.cplusplus.com/reference/iostream/">Here</a> is some reading for you.<br />- When using raw output, you can only read / write chars and char arrays; this is so you can resolve endianness issues yourself. Allegro&#39;s packfile routines will do the job for you, but if you want to use iostreams, then you need to do the (de)serialization yourself. e.g.:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> put_long<span class="k2">(</span>ostream<span class="k3">&amp;</span> out, <span class="k1">int</span> val<span class="k2">)</span> <span class="k2">{</span>
  out.put<span class="k2">(</span>val <span class="k3">&amp;</span> <span class="n">0xFF</span><span class="k2">)</span><span class="k2">;</span>
  out.put<span class="k2">(</span><span class="k2">(</span>val <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0xFF</span><span class="k2">)</span><span class="k2">;</span>
  out.put<span class="k2">(</span><span class="k2">(</span>val <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0xFF</span><span class="k2">)</span><span class="k2">;</span>
  out.put<span class="k2">(</span><span class="k2">(</span>val <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">24</span><span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0xFF</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>

<span class="k1">int</span> get_long<span class="k2">(</span>istream<span class="k3">&amp;</span> in<span class="k2">)</span> <span class="k2">{</span>
  <span class="k1">return</span>
    <span class="k2">(</span><span class="k1">long</span><span class="k2">)</span>in.get<span class="k2">(</span><span class="k2">)</span> <span class="k3">|</span>
    <span class="k2">(</span><span class="k2">(</span><span class="k1">long</span><span class="k2">)</span>in.get<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">|</span>
    <span class="k2">(</span><span class="k2">(</span><span class="k1">long</span><span class="k2">)</span>in.get<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">|</span>
    <span class="k2">(</span><span class="k2">(</span><span class="k1">long</span><span class="k2">)</span>in.get<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">24</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
Don&#39;t make the common mistake to just write raw memory:
</p><div class="source-code snippet"><div class="inner"><pre>fout.write<span class="k2">(</span><span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k3">&amp;</span>my_struct<span class="k2">)</span>, <span class="k1">sizeof</span><span class="k2">(</span>my_struct<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Endianness and struct padding may break compatibility between platforms, compilers, or even builds.<br />- A file produced with this method is not human-readable, and doesn&#39;t contain any extra data you could use for error checking. This is OK for small files, or where performance is a key feature; otherwise, config files or XML provide better debugging possibilities.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Mon, 09 Apr 2007 15:08:29 +0000</pubDate>
	</item>
</rss>
