Datenbank mit C benutzen – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Datenbank mit C benutzen Mon, 08 Dec 08 15:26:43 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316165#m1316165 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316165#m1316165 <p>Hallo,</p> <p>ich hab mal wieder eine Frage an die C-Programmierer hier ;)</p> <p>in meinem Programm habe ich vor, eine "Datenbank" (CSV-Datei) auszulesen. Dabei ist folgender Aufbau gegeben:</p> <p>--> long int;char;float;int[Zeilenumbruch]</p> <p>Dabei bestimme ich vorher die größe der Datei(da alle Felder eine feste länge haben)...</p> <pre><code class="block language-c"><span class="token keyword">long</span> <span class="token operator">*</span>Datenbank_EAN<span class="token punctuation">;</span> <span class="token keyword">char</span> <span class="token operator">*</span><span class="token operator">*</span>Datenbank_ArtikelName<span class="token punctuation">;</span> <span class="token keyword">float</span> <span class="token operator">*</span>Datenbank_Preis<span class="token punctuation">;</span> <span class="token keyword">int</span> <span class="token operator">*</span>Datenbank_Steuersatz<span class="token punctuation">;</span> <span class="token punctuation">[</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span> <span class="token function">fseek</span><span class="token punctuation">(</span>datei<span class="token punctuation">,</span> <span class="token number">0L</span><span class="token punctuation">,</span> <span class="token constant">SEEK_END</span><span class="token punctuation">)</span><span class="token punctuation">;</span> groesse <span class="token operator">=</span> <span class="token function">ftell</span><span class="token punctuation">(</span>datei<span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>... und erzeuge dementsprechend die Arrays:</p> <pre><code class="block language-c"> Datenbank_EAN <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">long</span> <span class="token operator">*</span><span class="token punctuation">)</span> <span class="token function">malloc</span><span class="token punctuation">(</span>AnzahlDatensaetze <span class="token operator">*</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">long</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Datenbank_ArtikelName <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">char</span> <span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token function">malloc</span><span class="token punctuation">(</span>AnzahlDatensaetze <span class="token operator">*</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span>i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>AnzahlDatensaetze<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token comment">//Zweidimensionales char-Array erzeugen </span> <span class="token punctuation">{</span> Datenbank_ArtikelName<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">char</span> <span class="token operator">*</span><span class="token punctuation">)</span> <span class="token function">malloc</span><span class="token punctuation">(</span><span class="token number">21</span> <span class="token operator">*</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> Datenbank_Preis <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">float</span> <span class="token operator">*</span><span class="token punctuation">)</span> <span class="token function">malloc</span><span class="token punctuation">(</span>AnzahlDatensaetze <span class="token operator">*</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">float</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Datenbank_Steuersatz <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">int</span> <span class="token operator">*</span><span class="token punctuation">)</span> <span class="token function">malloc</span><span class="token punctuation">(</span>AnzahlDatensaetze <span class="token operator">*</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Danach will ich die Datei auslesen und alles zusammen in Arrays speichern:</p> <pre><code class="block language-c"> <span class="token function">fseek</span><span class="token punctuation">(</span>datei<span class="token punctuation">,</span> <span class="token number">0L</span><span class="token punctuation">,</span> <span class="token constant">SEEK_SET</span><span class="token punctuation">)</span><span class="token punctuation">;</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token function">fscanf</span><span class="token punctuation">(</span>datei<span class="token punctuation">,</span> <span class="token string">"%d;%s;%f;%i"</span><span class="token punctuation">,</span> <span class="token operator">&</span>Datenbank_EAN<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">&</span>Datenbank_ArtikelName<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">&</span>Datenbank_Preis<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">&</span>Datenbank_Steuersatz<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token constant">EOF</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> i<span class="token operator">++</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Nur an der Stelle, an welcher ich auslese hängt sich das Programm auf. Könnt ihr mir sagen, was ich falsch mache?<br> Ich bin echt langsam am verzweifeln...</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 16:31:24 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316166#m1316166 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316166#m1316166 <p>Hi, und womit "hängt" sich das Programm an genau welcher Stelle auf?</p> <p>Woher kommt den "AnzahlDatensaetze"? Und warum verwendest du bei<br> Datenbank_Artikelname auf einmal 21?</p> <p>Und warum so kompliziert mit 4 Arrays? Kannst du nicht ein Objekt mit den vier Eigenschaften erzeugen und dann ein Array von/mit diesen Objekten füllen?</p> <p>Ciao, Frank</p> Datenbank mit C benutzen Mon, 08 Dec 08 16:36:28 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316167#m1316167 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316167#m1316167 <p>Hallo,</p> <blockquote> <p>Hi, und womit "hängt" sich das Programm an genau welcher Stelle auf?</p> </blockquote> <p>bei dem Lesen der Datei hängt sich das Programm auf.</p> <blockquote> <p>Woher kommt den "AnzahlDatensaetze"? Und warum verwendest du bei<br> Datenbank_Artikelname auf einmal 21?</p> </blockquote> <p>alle Felder haben eine Feste länge und deswegen ist<br> anzahlDatensaetze = groesse / [länge von einem Datensatz]</p> <blockquote> <p>Und warum so kompliziert mit 4 Arrays? Kannst du nicht ein Objekt mit den vier Eigenschaften erzeugen und dann ein Array von/mit diesen Objekten füllen?</p> </blockquote> <p>ich programmiere in C ... da gibts keine Objekte ;)</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 16:51:45 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316183#m1316183 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316183#m1316183 <p>Ah, okay, dann halt keine Objekte. ;)</p> <p>Und "hängt" auf äussert sich wie genau? Es wird einfach nicht fertig und tut gar nichts, es bricht mit einer Fehlermeldung ab, es konsumiert alle CPU Resourcen?</p> <p>Hast du mal probiert das Problem zu isolieren? Sprich einfach nur, Datei auf, alles auslesen, raus and Konsole/stdout, Datei wieder zu? fscanf liefert vielleicht irgendwas zurück und liefert nie EOF? <a href="http://irc.essex.ac.uk/www.iota-six.co.uk/c/i4_fwrite_fscanf_fprintf.asp" rel="nofollow noopener noreferrer">keine ahnung</a>?? ;(</p> <p>Ciao, Frank</p> Datenbank mit C benutzen Mon, 08 Dec 08 17:16:31 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316168#m1316168 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316168#m1316168 <p>Hi,</p> <blockquote> <blockquote> <p>Und warum so kompliziert mit 4 Arrays? Kannst du nicht ein Objekt mit den vier Eigenschaften erzeugen und dann ein Array von/mit diesen Objekten füllen?<br> ich programmiere in C ... da gibts keine Objekte ;)</p> </blockquote> </blockquote> <p>aber structs, das ist dasselbe in grün. Und das fiel mir beim Lesen deines Beitrags auch auf: Warum definiert er sich nicht eine Struktur, die einem einzelnen Datensatz entspricht, und arbeitet mit einem Array dieser Strukturen?</p> <p>So long,<br>  Martin</p> <div class="signature">-- <br> Paradox ist, wenn der Innenminister sich äußert und der Außenminister sich erinnert. </div> Datenbank mit C benutzen Mon, 08 Dec 08 17:21:27 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316169#m1316169 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316169#m1316169 <p>Hallo,</p> <blockquote> <p>aber structs, das ist dasselbe in grün. Und das fiel mir beim Lesen deines Beitrags auch auf: Warum definiert er sich nicht eine Struktur, die einem einzelnen Datensatz entspricht, und arbeitet mit einem Array dieser Strukturen?</p> </blockquote> <p>Das wäre eine Möglichkeit die gar nicht so dumm wäre ... nur mit structs kenne ich mich nicht so richtig aus un so entsteht erst einmal das Problem: wie kann ich mit unterschiedlichen Funktionen auf ein und denselben Datensatz<br> zugreifen?</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 17:34:08 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316170#m1316170 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316170#m1316170 <p>Hallo Christoph,</p> <blockquote> <blockquote> <p>aber structs, das ist dasselbe in grün. Und das fiel mir beim Lesen deines Beitrags auch auf: Warum definiert er sich nicht eine Struktur, die einem einzelnen Datensatz entspricht, und arbeitet mit einem Array dieser Strukturen?</p> </blockquote> </blockquote> <blockquote> <p>Das wäre eine Möglichkeit die gar nicht so dumm wäre ... nur mit structs kenne ich mich nicht so richtig aus</p> </blockquote> <p>es ist keine gute Idee, geeignete Features einer Programmiersprache nicht zu nutzen. Mach Dich mit struct vertraut.</p> <blockquote> <p>un so entsteht erst einmal das Problem: wie kann ich mit unterschiedlichen Funktionen auf ein und denselben Datensatz<br> zugreifen?</p> </blockquote> <p>Was hat das mit structs zu tun?</p> <p>Freundliche Grüße</p> <p>Vinzenz</p> Datenbank mit C benutzen Mon, 08 Dec 08 17:40:35 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316171#m1316171 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316171#m1316171 <p>Hallo,</p> <blockquote> <p>Hallo Christoph,</p> <blockquote> <blockquote> <p>aber structs, das ist dasselbe in grün. Und das fiel mir beim Lesen deines Beitrags auch auf: Warum definiert er sich nicht eine Struktur, die einem einzelnen Datensatz entspricht, und arbeitet mit einem Array dieser Strukturen?</p> </blockquote> </blockquote> <blockquote> <p>Das wäre eine Möglichkeit die gar nicht so dumm wäre ... nur mit structs kenne ich mich nicht so richtig aus</p> </blockquote> <p>es ist keine gute Idee, geeignete Features einer Programmiersprache nicht zu nutzen. Mach Dich mit struct vertraut.</p> <blockquote> <p>un so entsteht erst einmal das Problem: wie kann ich mit unterschiedlichen Funktionen auf ein und denselben Datensatz<br> zugreifen?</p> </blockquote> <p>Was hat das mit structs zu tun?</p> </blockquote> <p>weil ich (noch) nicht weis wie man da auf die Datensätze zugreifen kann, da ich die structs mit verschiedenen Funktionen nutze...</p> <p>struct Datenspeicher{<br>    long  EAN;<br>    char  ArtikelName[21];<br>    float Preis;<br>    int   Steuersatz;<br> }DS;</p> <pre><code class="block language-c"> <span class="token keyword">int</span> <span class="token function">funktion</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> DS datensatz_1<span class="token punctuation">;</span> datensatz_1<span class="token punctuation">.</span>EAN <span class="token operator">=</span> <span class="token number">13</span><span class="token punctuation">;</span> <span class="token function">andrer_funktion</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">int</span> <span class="token function">andrer_funktion</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> DS datensatz_1<span class="token punctuation">;</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span> datensatz_1<span class="token punctuation">.</span>EAN<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//Ist der Datensatz hier 13? </span> <span class="token punctuation">}</span> <span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">funktion</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">getch</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>sollte so etwas jetzt funktionieren?</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 17:48:05 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316173#m1316173 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316173#m1316173 <blockquote> <p>sollte so etwas jetzt funktionieren?</p> </blockquote> <p>wahrscheinlich eher nicht.</p> <p>Woher sollte "andrer_funktion()" wissen, dass die Eigenschaft EAN die du irgendeiner Instanz von Datenspeicher in irgendeiner Funktion zugewiesen hast?</p> <p>Von wegen Gültigkeitsbereich und so.</p> <p>Frank</p> Strukturen Tue, 09 Dec 08 09:22:31 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316172#m1316172 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316172#m1316172 <p>Hallo,</p> <blockquote> <p>weil ich (noch) nicht weis wie man da auf die Datensätze zugreifen kann, da ich die structs mit verschiedenen Funktionen nutze...</p> </blockquote> <p>Objekte in Strukturen zu packen ist eine gute Idee, so ist es wesnetlich einfacher den Überblick zu behalten. Und du sparst dir irgendwelchen Speichergrößenberechnungen.</p> <p>Globale Variablen die kreuz und quer im Programm verändert werden sind hingegen nicht so gut. Bei kleineren Programmen mag das ja noch angehen, aber du verlierst sehr schnell den Überblick welche Funktion wo etwas geändert hat.</p> <p>Guck dir das nachfolgende Beispiel an, es sollte den Vorteil der Datenhaltung in einer Struktur deutlich zeigen. Und du hast keine globalen Variablen sondern übergibst nur einen Zeiger auf die Struktur.</p> <p>HTH</p> <p>Jochen (der C liebt und sich gerade mit so neumodischem C# Mist rumärgert)</p> <pre><code class="block language-c"> <span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token punctuation">{</span> <span class="token keyword">int</span> test<span class="token punctuation">;</span> <span class="token keyword">char</span> name<span class="token punctuation">[</span><span class="token number">20</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>Datensatz<span class="token punctuation">;</span> <span class="token keyword">int</span> <span class="token function">Machwas</span><span class="token punctuation">(</span>Datensatz <span class="token operator">*</span>zeiger<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token keyword">int</span> argc<span class="token punctuation">,</span> <span class="token keyword">char</span><span class="token operator">*</span> argv<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Datensatz <span class="token operator">*</span>ptr<span class="token punctuation">;</span> Datensatz <span class="token operator">*</span>p<span class="token punctuation">;</span> <span class="token comment">// Anzahl bestimmen </span> <span class="token keyword">int</span> Anzahl<span class="token operator">=</span><span class="token number">13</span><span class="token punctuation">;</span> <span class="token keyword">int</span> i<span class="token punctuation">;</span> <span class="token comment">// Speicherplatz für Datensatz * Anzahl </span> ptr <span class="token operator">=</span> <span class="token punctuation">(</span>Datensatz<span class="token operator">*</span><span class="token punctuation">)</span><span class="token function">malloc</span><span class="token punctuation">(</span><span class="token keyword">sizeof</span><span class="token punctuation">(</span>Datensatz<span class="token punctuation">)</span><span class="token operator">*</span>Anzahl<span class="token punctuation">)</span><span class="token punctuation">;</span> p<span class="token operator">=</span>ptr<span class="token punctuation">;</span> <span class="token comment">// Zeiger auf den Beginn für später merken </span> ptr<span class="token operator">-></span>test<span class="token operator">=</span><span class="token number">10</span><span class="token punctuation">;</span> <span class="token comment">// ptr zeigt auf ersten Datensatz </span> ptr<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>test<span class="token operator">=</span><span class="token number">20</span><span class="token punctuation">;</span> <span class="token comment">// ptr[1] das zweite Element </span> ptr <span class="token operator">+=</span> <span class="token number">2</span><span class="token punctuation">;</span> <span class="token comment">// Zeigerarithmetik </span> ptr<span class="token operator">-></span>test<span class="token operator">=</span><span class="token number">30</span><span class="token punctuation">;</span> <span class="token comment">// zeigt jetzt auf den dritten Datensatz </span> <span class="token function">Machwas</span><span class="token punctuation">(</span><span class="token operator">++</span>ptr<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span>i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span><span class="token number">4</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token comment">// Kontrollausgabe </span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%i "</span><span class="token punctuation">,</span>p<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>test<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">free</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">int</span> <span class="token function">Machwas</span><span class="token punctuation">(</span>Datensatz <span class="token operator">*</span>zeiger<span class="token punctuation">)</span> <span class="token punctuation">{</span> zeiger<span class="token operator">-></span>test<span class="token operator">=</span><span class="token number">40</span><span class="token punctuation">;</span> <span class="token keyword">return</span> true<span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <div class="signature">-- <br> <img src="http://www.electric-lemon.de/scribble/pics/tn_pic3exWkx.png" alt="" loading="lazy"> Kritzeln statt texten: <a href="http://www.electric-lemon.de/scribbleboard.php" rel="nofollow noopener noreferrer">Scribbleboard</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 17:52:01 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316174#m1316174 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316174#m1316174 <p>Hallo,</p> <blockquote> <p>wahrscheinlich eher nicht.</p> <p>Woher sollte "andrer_funktion()" wissen, dass die Eigenschaft EAN die du irgendeiner Instanz von Datenspeicher in irgendeiner Funktion zugewiesen hast?</p> <p>Von wegen Gültigkeitsbereich und so.</p> </blockquote> <p>eben. Das ist das Problem, da die Datensätze von mehrern Funktionen zu unterschiedlichen Zeitpunkten verwendet werden ...</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 18:04:12 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316182#m1316182 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316182#m1316182 <p>Hallo,</p> <blockquote> <blockquote> <p>Woher sollte "andrer_funktion()" wissen, dass die Eigenschaft EAN die du irgendeiner Instanz von Datenspeicher in irgendeiner Funktion zugewiesen hast?</p> <p>Von wegen Gültigkeitsbereich und so.</p> </blockquote> <p>eben. Das ist das Problem, da die Datensätze von mehrern Funktionen zu unterschiedlichen Zeitpunkten verwendet werden ...</p> </blockquote> <p>wo ist das Problem? Warum hast Du es nicht, wenn Du statt in ein eindimensionales Array von structs Deine Daten in x Arrays einliest?</p> <p>Freundliche Grüße</p> <p>Vinzenz</p> Datenbank mit C benutzen Mon, 08 Dec 08 18:05:10 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316175#m1316175 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316175#m1316175 <p>Wieso hast du dann Zugriff auf irgendein dahergelaufenes Array? Und irgendwie schrieb ich ja auch davon, die erzeugten Objekte/struct instanzen zu Elementen eines Arrays zu machen. Ansonsten kann man Variablen doch auch als Referenz zwischen Funktionen übergeben, dachte ich zumindest mal.</p> <p>Und Probleme sollte man immer versuchen so gut wie möglich zu isolieren, d.h. notfalls ein anderes kleines Programm schreiben, was "nicht funzende" Teile des eigentlichen Programms nachbildet. In deinem Falle wäre das:</p> <ul> <li>Datei öffnen</li> <li>Inhalt komplett auslesen</li> <li>Datei zumachen</li> <li>Irgendwie darstellen (Textbox, MessageBox, Konsole - vollkommen wurst)</li> </ul> <p>Und dann davon ausgehend den Umfang der Funktion erweitern, bis es nicht mehr funktioniert und es den ursprünglichen Zweck erfüllt, dann kannst du es zurückpacken in den anderen Code.</p> <p>Mit was entwickelst du denn eigentlich, Notepad und Compiler?</p> <p>Frank</p> Datenbank mit C benutzen Mon, 08 Dec 08 18:11:26 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316176#m1316176 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316176#m1316176 <p>Hallo,</p> <blockquote> <p>Wieso hast du dann Zugriff auf irgendein dahergelaufenes Array? Und irgendwie schrieb ich ja auch davon, die erzeugten Objekte/struct instanzen zu Elementen eines Arrays zu machen. Ansonsten kann man Variablen doch auch als Referenz zwischen Funktionen übergeben, dachte ich zumindest mal.</p> </blockquote> <p>weil mein array global gesetzt ist.</p> <blockquote> <p>Und Probleme sollte man immer versuchen so gut wie möglich zu isolieren,</p> </blockquote> <p>ist nicht nötig, da davor nur ein Fenster erzeugt wird ... also kann ich gleich in der funktion rumpfuschen ;)</p> <blockquote> <p>Mit was entwickelst du denn eigentlich, Notepad und Compiler?</p> </blockquote> <p>notepad++ und Dev C++ 4.9.9.2</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 19:00:33 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316177#m1316177 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316177#m1316177 <blockquote> <p>weil mein array global gesetzt ist.</p> </blockquote> <p>Na da hast du ja die Antwort.</p> <p>FF</p> Datenbank mit C benutzen Mon, 08 Dec 08 21:33:11 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316178#m1316178 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316178#m1316178 <p>Hallo,</p> <blockquote> <blockquote> <p>weil mein array global gesetzt ist.<br> Na da hast du ja die Antwort.</p> </blockquote> </blockquote> <p>was soll daran falsch sein ein Array global zu setzen?<br> das ist das gleiche als wenn ich es lokal setze, nur das ich mit mehreren funktionen zugreifen kann ... das hat nix damit zu tun, das die werte nicht richtig eingelesen werden oder falsch ausgegeben werden ...</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 21:59:25 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316179#m1316179 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316179#m1316179 <p>Habe ich irgendwas davon geschrieben, dass es falsch sein, ein Array global zu deklarieren?</p> <p>Nochmal für dich zum mitmeisseln:</p> <ul> <li>du setzt x Arrays global, damit du mit mehreren Funktionen von unterschiedlichen Ecken drauf zugreifen kannst</li> <li>dir wurde empfohlen, ein struct zu verwenden (und auch dessen Instanzen in einem Array zu halten)</li> <li>du hast irgendwas versucht, ein solches struct im Gültigkeitsbereich einer Funktion "sowieso" zu instanzieren und mit Werten zu bestücken und dann anzunehmen in irgendeiner anderen Funktion mit einem anderen Gültigkeitsbereich auf dieselbe Instanz von deinem struct wieder zugreifen zu können</li> <li>es wurde dir gesagt/geschrieben, dass dies aufgrund von "Gültigkeitsbereichen" nicht so gehen kann</li> <li>es wurde dir die Frage gestellt, warum du denn dann auf deine Arrays von überall Zugriff hast</li> </ul> <p>Wie gross muss den der Zaunspfahl sein mit dem man dir winkt?</p> <p>Und ja richtig, wie du deine Daten verwaltest hat nicht direkt damit etwas zu tun, welche Fehler du beim "einlesen/auslesen" machst. shit-in, shit-out. Deswegen habe ich dich darauf (sogar wohl schon vorher) hingewiesen, dein Problem mit dem Datei-Lesen zu isolieren. Aber das hältst du wohl nicht für nötig. Bist ja schon zu gut und kannst gleich an der Funktion "herumpfuschen"?</p> <p>Also: Gehe zurück zu Start, ziehe nicht DM 4000 ein.</p> <p>Übrigens: Ich habe absolut keinen blassen Schimmer von C/C++.</p> <p>Ciao, Frank</p> Datenbank mit C benutzen Mon, 08 Dec 08 22:25:38 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316180#m1316180 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316180#m1316180 <p>Hallo,</p> <blockquote> <p>Habe ich irgendwas davon geschrieben, dass es falsch sein, ein Array global zu deklarieren?</p> </blockquote> <p>nein, nur hast du zu meiner aussage("ich habe meine arrays global") geschrieben: "Da hast du die antwort" ... <für dein problem><br> was sollte ich andres daraus schliessen?</p> <blockquote> <p>Nochmal für dich zum mitmeisseln:</p> <ul> <li>du setzt x Arrays global, damit du mit mehreren Funktionen von unterschiedlichen Ecken drauf zugreifen kannst</li> </ul> </blockquote> <p>richtig</p> <blockquote> <ul> <li>dir wurde empfohlen, ein struct zu verwenden (und auch dessen Instanzen in einem Array zu halten)</li> </ul> </blockquote> <p>habe ich versucht, jedoch muss ich mich in diese thematik erst einlesen</p> <blockquote> <ul> <li>du hast irgendwas versucht, ein solches struct im Gültigkeitsbereich einer Funktion "sowieso" zu instanzieren und mit Werten zu bestücken und dann anzunehmen in irgendeiner anderen Funktion mit einem anderen Gültigkeitsbereich auf dieselbe Instanz von deinem struct wieder zugreifen zu können</li> </ul> </blockquote> <p>richtig. Nur mir der Vorannahme das es sowieso nicht funktioniert. Soweit konnte ich noch denken.</p> <blockquote> <ul> <li>es wurde dir gesagt/geschrieben, dass dies aufgrund von "Gültigkeitsbereichen" nicht so gehen kann</li> </ul> </blockquote> <p>dachte ich mir.</p> <blockquote> <ul> <li>es wurde dir die Frage gestellt, warum du denn dann auf deine Arrays von überall Zugriff hast</li> </ul> </blockquote> <p>weil sie global sind</p> <blockquote> <p>Wie gross muss den der Zaunspfahl sein mit dem man dir winkt?</p> </blockquote> <p>also schliess ich jetz daraus, das ich die arrays "wegschmeiße" und alles in structs "auslagere". nur habe ich (noch) keinen plan wie ich außerhalb einer Funktion auf eben diese Werte zugreife.<br> Deswgen dachte ich, irgendjemand, der Ahnung von der ganzen Thematik hat(nicht du, weil siehe unten) kann mir bei meinem Problem _präzise_ helfen.<br> ALSO:<br> meine erneute frage:<br> wie kann ich diese Daten in ein struct speichern, und mit anderen funktionen darauf zugreifen?<br> meine überlegung:<br> alle arrays werden als zeiger irgendwo gespeichert(wie weis ich nicht), somit kann ich problemlos(?) darauf zugreifen.</p> <p>richtig?</p> <blockquote> <p>Und ja richtig, wie du deine Daten verwaltest hat nicht direkt damit etwas zu tun, welche Fehler du beim "einlesen/auslesen" machst. shit-in, shit-out. Deswegen habe ich dich darauf (sogar wohl schon vorher) hingewiesen, dein Problem mit dem Datei-Lesen zu isolieren. Aber das hältst du wohl nicht für nötig. Bist ja schon zu gut und kannst gleich an der Funktion "herumpfuschen"?</p> </blockquote> <p>und die begründung habe ich auch schon gesagt ... ob ich mir ein kleines extra-übungs-programm für das Datei-Lesen schreibe, oder in der Funktion schreibe, die sowieso als zweites im Programm(nachdem fenster erstellen) aufgerufen wird kommt aufs selbe. Ich benutze den selben code und die Übersicht wird auch nicht übersichlicher als sie jetzt schon ist. Das würde mir keine Vor- und Nachteile bringen.<br> Aber trotzdem auf wunsch eines einzelnen herren(du) habe ich es gemacht und es bringt mir genauso wenig.</p> <blockquote> <p>Übrigens: Ich habe absolut keinen blassen Schimmer von C/C++.</p> </blockquote> <p>und warum schreibst du dann in diesem thread?</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Tue, 09 Dec 08 13:45:11 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316181#m1316181 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316181#m1316181 <p>Yerf!</p> <blockquote> <p>meine erneute frage:<br> wie kann ich diese Daten in ein struct speichern, und mit anderen funktionen darauf zugreifen?</p> </blockquote> <p>Vermutlich liegt das ganze an einem immer noch fehlenden Verständnis von Structs. Wenn dies einmal gelöst ist wird es dir wie selbstverständlich vorkommen, anstelle deiner globalen Einzelarrays ein globales Array von Structs zu verwenden...</p> <p>Gruß,</p> <p>Harlequin</p> <div class="signature">-- <br> <!--[if IE]>This page is best viewed with a webbrowser. <a href="http://www.opera.com" rel="nofollow noopener noreferrer">Get one today!</a><![endif]--> </div> Datenbank mit C benutzen Mon, 08 Dec 08 17:09:25 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316184#m1316184 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316184#m1316184 <p>Hallo,</p> <blockquote> <p>Ah, okay, dann halt keine Objekte. ;)</p> <p>Und "hängt" auf äussert sich wie genau? Es wird einfach nicht fertig und tut gar nichts, es bricht mit einer Fehlermeldung ab, es konsumiert alle CPU Resourcen?</p> </blockquote> <p>es reagiert auf gar nichts mehr ... nach einigen mausklicken erscheint ein Dialog, wo ich auf "Sofort beenden" drücke und danach ist schluss ...</p> <blockquote> <p>Hast du mal probiert das Problem zu isolieren? Sprich einfach nur, Datei auf, alles auslesen, raus and Konsole/stdout, Datei wieder zu?</p> </blockquote> <p>nee... kann ich nicht, da ich nicht die größe des Text-files weis(anzahl der Datensätze) ... noch dazu arbeite ich in WinApi :)</p> <p>fscanf liefert vielleicht irgendwas zurück und liefert nie EOF?<br> hmmm ... ok .. ich hab mir mal den rückgabewert ausgeben lassen:</p> <pre><code class="block language-c"> <span class="token function">fseek</span><span class="token punctuation">(</span>datei<span class="token punctuation">,</span> <span class="token number">0L</span><span class="token punctuation">,</span> <span class="token constant">SEEK_SET</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">int</span> dings <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">do</span> <span class="token punctuation">{</span> dings <span class="token operator">=</span> <span class="token function">fscanf</span><span class="token punctuation">(</span>datei<span class="token punctuation">,</span> <span class="token string">"%d;%s;%f;%i\n"</span><span class="token punctuation">,</span> <span class="token operator">&</span>Datenbank_EAN<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">&</span>Datenbank_ArtikelName<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">&</span>Datenbank_Preis<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">&</span>Datenbank_Steuersatz<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">strcpy</span><span class="token punctuation">(</span>str<span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">sprintf</span><span class="token punctuation">(</span>str<span class="token punctuation">,</span> <span class="token string">"%i"</span><span class="token punctuation">,</span> dings<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">MessageBox</span><span class="token punctuation">(</span>hWnd<span class="token punctuation">,</span> str<span class="token punctuation">,</span> <span class="token string">"..."</span><span class="token punctuation">,</span> MB_OK<span class="token punctuation">)</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token function">feof</span><span class="token punctuation">(</span>datei<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>ergebnis:<br> 2<br> 0<br> 0<br> 0<br> 0<br> .<br> .<br> .</p> <p>was soll das bedeuten?</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 17:13:40 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316185#m1316185 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316185#m1316185 <p>Hallo,</p> <p>noch ein Problem:</p> <p>Das hier ist der Inhalt der Text-Datei:<br> 1234567891234;Birne               ;0000.95;07<br> 9465732864513;Apfel               ;0000.56;07<br> 1678432976452;Johannisbeere       ;0000.68;07<br> 7964351687431;Staubsauger         ;0089.99;19<br> 4653791584678;Erdbeere            ;0000.64;07<br> 4387691234395;Notebook            ;0449.99;19<br> 4324829243582;Chocolate Republic  ;0002.55;19</p> <p>Diesen Gebe ich so wieder:</p> <pre><code class="block language-c"> <span class="token keyword">for</span><span class="token punctuation">(</span>i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator"><</span>AnzahlDatensaetze<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">strcpy</span><span class="token punctuation">(</span>str<span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//EAN ARTIKEL PREIS(mit MwSt.) </span> <span class="token function">sprintf</span><span class="token punctuation">(</span>str<span class="token punctuation">,</span> <span class="token string">"%d %s %f\r\n"</span><span class="token punctuation">,</span> Datenbank_EAN<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> Datenbank_ArtikelName<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>Datenbank_Preis<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">/</span><span class="token number">100</span><span class="token operator">/</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token operator">+</span><span class="token punctuation">(</span><span class="token keyword">float</span><span class="token punctuation">)</span>Datenbank_Steuersatz<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//Ausgabe in die Liste </span> <span class="token function">SetDlgItemText</span><span class="token punctuation">(</span>hWnd<span class="token punctuation">,</span> <span class="token number">1401</span><span class="token punctuation">,</span> str<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>als Ausgabetext steht danach aber im Textfeld:<br> 1128088908 x|| 0.000000</p> <p>also jetzt bin ich echt ratlos ;)</p> <blockquote> <p>MfG. Christoph Ludwig</p> </blockquote> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 17:22:59 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316193#m1316193 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316193#m1316193 <p>Hallo,</p> <blockquote> <p>strcpy(str, "");</p> </blockquote> <p>das ist schön, aber überflüssig, wenn du den String gleich in der nächsten Anweisung sowieso mit sprintf() füllst. Außerdem wäre, wenn nötig, ein simples<br>   str[0] = 0;<br> einfacher und "billiger" als der Aufruf einer Stringfunktion.</p> <blockquote> <p>sprintf(str, "%d %s %f\r\n", Datenbank_EAN[i], Datenbank_ArtikelName[i], (Datenbank_Preis[i]/100/(100+(float)Datenbank_Steuersatz[i])));<br> als Ausgabetext steht danach aber im Textfeld:<br> 1128088908 x|| 0.000000</p> </blockquote> <p>Dann hattest du schon vorher ein Problem mit Datenbank_ArtikelName[i]. Hast du den Wert vorher mal überprüft?</p> <p>So long,<br>  Martin</p> <div class="signature">-- <br> Du kannst dem Leben nicht mehr Tage geben.<br> Aber dem Tag mehr Leben. </div> Datenbank mit C benutzen Tue, 09 Dec 08 06:43:46 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316186#m1316186 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316186#m1316186 <p>Hallo Ludwig,</p> <p>zu den structs und den globalen Parametern:</p> <p>C ist eine mächtige Sprache, und man darf als Entwickler einfach nicht alles machen, was sie einem erlaubt. So sollte man auf globale Variablen weitestgehend verzichten, weil sie fehlerträchtig sind und die Fehler sich auch noch schwer finden lassen. Du musst Dich dringend mit Zeigern und mit Parameterübergabe beschäftigen, sonst kommst Du in C nicht weit.</p> <p>Eine Struktur, genauso wie ein Array machst Du in einer Funktion nutzbar, in dem Du einen Zeiger darauf als Parameter überträgst. Den Zeiger erhälst Du über & also z.B. beim Funktionsaufruf Funktionsname(&meineStruktur). Innerhalb der Funktion referenzierst Du den Inhalt eines Zeigers über *. Also z.B. *pMeineStruktur.elementname (da der Übergabeparameter ein Zeiger ist, ist es sinnvoll, seinen Namen mit p (wie Pointer) auch so zu kennzeichnen). Oder bei Strukturen kannst Du auf die Elemente einer verzeigerten Struktur bequem so zugreifen: pMeineStruktur->elementname.</p> <p>Zu Deinem Problem:</p> <p>Bei Deinem Fehler tippe ich auf einen Buffer-Überlauf. Das Einlesen der Daten mittels scanf ist prädestiniert für so etwas, da scanf ja die Länge der gelesenen Daten nicht überprüft, sondern gnadenlos in den angegebenen Speicherbereich schreibt, auch wenn der reservierte Buffer dafür zu klein ist. Wieviel Byte stehen auf Deinem System für long-Variablen zur Verfügung? Du bräuchtes sechs.</p> <p>Steigt Dein REchner schon nach einem Lesevorgang (einem Schleifendurchlauf) aus? Lies doch jeweils erstmal nur die einzelnen Zeilen mit einem zeilenorientierten Lesebefehl. Und dann parst Du die einzelnen Zeilen in Deine Struktur. Du kannst sie auch erst noch in einzelne Strings für jeden Parameter zerlegen. So kannst Du Schritt für Schritt heraus finden, wo der Fehler liegt. Denkst Du bei Deinen Strings dran, dass sie immer ein Byte mehr für die Ende-Kennung brauchen?</p> <p>Ciao, Stefanie</p> Datenbank mit C benutzen Tue, 09 Dec 08 10:21:24 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316187#m1316187 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316187#m1316187 <p>Hallo,</p> <blockquote> <p>Hallo Ludwig,</p> </blockquote> <p>nee ... Christoph. Ludwig ist nur der Nachname ;)</p> <blockquote> <p>zu den structs und den globalen Parametern:</p> <p>C ist eine mächtige Sprache, und man darf als Entwickler einfach nicht alles machen, was sie einem erlaubt. So sollte man auf globale Variablen weitestgehend verzichten, weil sie fehlerträchtig sind und die Fehler sich auch noch schwer finden lassen.</p> </blockquote> <p>Ja ok. außer das Fenster-Handle(HWND hWnd) habe ich keine Globalen Variablen und ich bin mir bewusst, das es besser ist, Zeiger zu verwenden und auf Globale Variablen zu verzichten.<br> (Coding-Style)</p> <blockquote> <p>Du musst Dich dringend mit Zeigern und mit Parameterübergabe beschäftigen, sonst kommst Du in C nicht weit.</p> </blockquote> <p>das wird nicht einfach, da ich diese Funktionen, die auf die struktur zufgreifen als Prozedur eines Dialoges aufrufe. Somit kann ich der Funktion keine Parameter übergeben.<br> die Zeiger an sich wären kein Problem, da ich mich weitestgehend damit auskenne.</p> <blockquote> <p>Bei Deinem Fehler tippe ich auf einen Buffer-Überlauf. Das Einlesen der Daten mittels scanf ist prädestiniert für so etwas, da scanf ja die Länge der gelesenen Daten nicht überprüft, sondern gnadenlos in den angegebenen Speicherbereich schreibt, auch wenn der reservierte Buffer dafür zu klein ist. Wieviel Byte stehen auf Deinem System für long-Variablen zur Verfügung? Du bräuchtes sechs.</p> </blockquote> <p>Buffer-überlauf? Glaube ich nicht, da alle Felder in der Datei eine Feste länge haben und ich demnach nur die arrays entsprechend der Anzahl dynamisch erzeuge(malloc).<br> oder welche Datentypen schlägst du bei<br>    EAN          -> 13 Zahlen       -> long array[AnzahlDatensätze]<br>    Artikel-Name -> max. 20 Zeichen -> char array[AnzahlDatensätze][21]<br>    Preis        -> max. 999,99€    -> float array[AnzahlDatensätze]<br>    Steuersatz:  -> 7% bzw. 19%     -> int array[AnzahlDatensätze]<br> vor? (Dahinter stehen meine Datentypen. Sind diese zu klein?)</p> <blockquote> <p>Steigt Dein REchner schon nach einem Lesevorgang (einem Schleifendurchlauf) aus?</p> </blockquote> <p>nein, jetzt hängt er sich gar nicht mehr auf. Jetzt ist nur das Problem, das er mir sch*** ... suboptimale ergebnisse ausgibt.</p> <blockquote> <p>Lies doch jeweils erstmal nur die einzelnen Zeilen mit einem zeilenorientierten Lesebefehl. Und dann parst Du die einzelnen Zeilen in Deine Struktur. Du kannst sie auch erst noch in einzelne Strings für jeden Parameter zerlegen. So kannst Du Schritt für Schritt heraus finden, wo der Fehler liegt.</p> </blockquote> <p>ok. Ich werds mal versuchen.</p> <blockquote> <p>Denkst Du bei Deinen Strings dran, dass sie immer ein Byte mehr für die Ende-Kennung brauchen?</p> </blockquote> <p>ja, deswegen die zeile <code class="language-c"><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token function">malloc</span><span class="token punctuation">(</span><span class="token number">21</span> <span class="token operator">*</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Tue, 09 Dec 08 11:31:00 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316188#m1316188 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316188#m1316188 <p>Hi Christoph,</p> <blockquote> <p>nee ... Christoph. Ludwig ist nur der Nachname ;)</p> </blockquote> <p>sorry - finde ich aber auch irgendwie witzig ;-)</p> <blockquote> <p>Somit kann ich der Funktion keine Parameter übergeben.</p> </blockquote> <p>Aha. Naja gut, funktionieren muss es ja trotzdem.</p> <blockquote> <p>oder welche Datentypen schlägst du bei<br>    EAN          -> 13 Zahlen       -> long array[AnzahlDatensätze]<br>    Artikel-Name -> max. 20 Zeichen -> char array[AnzahlDatensätze][21]<br>    Preis        -> max. 999,99€    -> float array[AnzahlDatensätze]<br>    Steuersatz:  -> 7% bzw. 19%     -> int array[AnzahlDatensätze]<br> vor? (Dahinter stehen meine Datentypen. Sind diese zu klein?)</p> </blockquote> <p>Lass Dir mal mit sizeof(long) anzeigen, wieviele Bytes Dir für ein long zur Verfügung gestellt werden. Üblicherweise sind das vier, und somit tatsächlich zu wenig für eine Zahl bestehend aus 13 Ziffern (9999999999999 braucht 6 Byte). Mit einer float-Zahl klappt es bei mir leider auch nicht richtig; es wird dann zwar ein Wert gelesen, der ist aber nicht korrekt (ich arbeite selten mit float-Zahlen, vielleicht weiss ein anderer da mehr). Aber brauchst Du hier überhaupt eine Zahl, tut es ev. auch ein String?</p> <p>Ich habe das jetzt mal probiert, also einen Deiner Beispielstrings mit sscanf geparst folgendermaßen funktioniert das bei mir:</p> <p>char  zeile[]    = "1234567891234;Birne               ;0000.95;07";<br> float fEan       = 0;<br> char  name[200]  = "";<br> float fPreis     = 0;<br> int   steuersatz = 0;</p> <p>sscanf(zeile, "%f;%s ;%f;%d", &fEan, name, &fPreis, &steuersatz);</p> <p>printf("fEan:%f name:%s preis:%f steuersatz:%d\n\n",<br>        fEan, name, preis, steuersatz);</p> <p>ergibt als Ausgabe:</p> <p>fEan:1234567954432.000000 name:Birne preis:0.950000 steuersatz:7</p> <p>Das Trennzeichen im Preis muss ein Punkt sein (kein Komma). Hinter dem %s muss vor dem ; noch ein Leerzeichen stehen, sonst liest er den Preis nicht richtig.</p> <p>Ich glaube, Du hattest im sscanf-Aufruf auch die Namen-Variable falsch adressiert. Da ein string bereits ein Pointer auf einen Datenbereich ist, darf dort kein & mehr davor.</p> <p>Vielleicht hilft Dir das schon mal weiter, ich muss gleich nach Hause und da habe ich derzeit keinen C-Compiler.</p> <p>Ciao, Stefanie</p> Datenbank mit C benutzen Tue, 09 Dec 08 11:46:40 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316191#m1316191 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316191#m1316191 <p>PS: Mit einem long hast Du noch nicht mal die vollen vier Byte zur Verfügung.   Dafür müsstest Du zumindest ein unsigned long benutzen.</p> Datenbank mit C benutzen Tue, 09 Dec 08 12:12:32 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316189#m1316189 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316189#m1316189 <p>Hallo,</p> <blockquote> <p>Hi Christoph,</p> <blockquote> <p>nee ... Christoph. Ludwig ist nur der Nachname ;)</p> </blockquote> <p>sorry - finde ich aber auch irgendwie witzig ;-)</p> </blockquote> <p>häää?? *dumm tu* was jetz genau? :)</p> <blockquote> <p>Das Trennzeichen im Preis muss ein Punkt sein (kein Komma). Hinter dem %s muss vor dem ; noch ein Leerzeichen stehen, sonst liest er den Preis nicht richtig.</p> </blockquote> <p>DAAAASSSSSSS war der Fehler!!!!!!!<br> nur, weil ich dieses Leerzeichen nicht gesetzt habe ging das nicht. Jetzt gehts *juhuhhhhh*</p> <blockquote> <p>Ich glaube, Du hattest im sscanf-Aufruf auch die Namen-Variable falsch adressiert. Da ein string bereits ein Pointer auf einen Datenbereich ist, darf dort kein & mehr davor.</p> </blockquote> <p>das ist schon geändert.<br> Nur noch eine Frage:</p> <p>wie kann ich erreichen, das ein String (%s) mit exakt 20 Zeichen ausgeben wird(linksbündig)?<br> also so, das auf jeden Fall 20 Zeichen ausgeben werden, egal ob Erdbeere(beispiel) nur 8 Zeichen hat?<br> Müsste ich da noch mir einer Schleife fehlende lehrzeichen auffüllen oder gibts da etwas "besseres" ?</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Tue, 09 Dec 08 14:01:42 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316190#m1316190 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316190#m1316190 <p>Hi,</p> <blockquote> <p>häää?? *dumm tu* was jetz genau? :)</p> </blockquote> <p>Ludwig ist bei uns zu Hause so eine Art geflügeltes Wort. Ludwig ist immer gerade der, dem von den anderen ignoriert wird. Frag mich nicht, woher wir das haben, aber das "Ludwig" hat mich wohl so magisch angezogen, dass ich das "Christoph" übersehen habe ;-)</p> <blockquote> <p>nur, weil ich dieses Leerzeichen nicht gesetzt habe ging das nicht. Jetzt gehts *juhuhhhhh*</p> </blockquote> <p>Oh schön. Dann war das meine gute Tat für heute :-)</p> <blockquote> <p>wie kann ich erreichen, das ein String (%s) mit exakt 20 Zeichen ausgeben wird(linksbündig)?<br> also so, das auf jeden Fall 20 Zeichen ausgeben werden, egal ob Erdbeere(beispiel) nur 8 Zeichen hat?</p> </blockquote> <p>Das müsste mit der ganz normalen Formatierungsvorschrift gehen. Also %-20s statt %s.</p> <p>Ciao, Stefanie</p> <p>PS: Muss jetzt zur Weihnachtsfeier, die erste von 4(!) in dieser Woche.</p> Datenbank mit C benutzen Tue, 09 Dec 08 12:13:21 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316192#m1316192 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316192#m1316192 <p>Hallo,</p> <blockquote> <p>PS: Mit einem long hast Du noch nicht mal die vollen vier Byte zur Verfügung.   Dafür müsstest Du zumindest ein unsigned long benutzen.</p> </blockquote> <p>nicht nötig ... ich hab float verwendet</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div> Datenbank mit C benutzen Mon, 08 Dec 08 17:30:17 Z https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316194#m1316194 https://forum.selfhtml.org/self/2008/dec/8/datenbank-mit-c-benutzen/1316194#m1316194 <p>Hallo,</p> <blockquote> <p>Hallo,</p> <blockquote> <p>strcpy(str, "");</p> </blockquote> <p>das ist schön, aber überflüssig, wenn du den String gleich in der nächsten Anweisung sowieso mit sprintf() füllst. Außerdem wäre, wenn nötig, ein simples<br>   str[0] = 0;<br> einfacher und "billiger" als der Aufruf einer Stringfunktion.</p> </blockquote> <p>ja, ok ... das ist nur eine Frage von Codingstyle --> den muss ich sowieso noch mal überarbeiten weil ich jetz so viel in der funktion rumgepfuscht hab ;)</p> <blockquote> <blockquote> <p>sprintf(str, "%d %s %f\r\n", Datenbank_EAN[i], Datenbank_ArtikelName[i], (Datenbank_Preis[i]/100/(100+(float)Datenbank_Steuersatz[i])));<br> als Ausgabetext steht danach aber im Textfeld:<br> 1128088908 x|| 0.000000</p> </blockquote> <p>Dann hattest du schon vorher ein Problem mit Datenbank_ArtikelName[i]. Hast du den Wert vorher mal überprüft?</p> </blockquote> <p>wie und an welcher stelle soll ich den überprüfen?<br> ich les den wert aus, schreibe ihn in den Array und dazwischen mache ich nichts ...</p> <p>MfG. Christoph Ludwig</p> <div class="signature">-- <br> Wo die Sprache aufhört, fängt die Musik an...<br> Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)<br> Go to <a href="http://home.arcor.de/minicrispie/index.html" rel="nofollow noopener noreferrer">this</a> </div>