Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
11.11.2002, 20:58
Mari



Hallo,
ich habe eine Anfänger Frage: ich speiche in einer Datei verschiedene Ergebnisse. Diese sehen ungefäht so aus :
Speichername;Wert;Typ
Speichername;Wert;Typ
Meine Frage wie kann ich in ListBox nur diese zeile auslesen in denen string "doc" steht, weil im moment lese ich alle Zeilen aus.
Mein code sieht so aus:

string cZeile; // Textzeile als Datentyp string
fstream Datei; // Dateiobjekt erstellen

Datei.open("C:\\text.txt",ios::in); // Datei lesend öffnen

for (int Index = 0; std::getline(Datei, cZeile); Index++) // Zeilen bis Dateiende auslesen

{

((CListBox*)GetDlgItem(IDC_LIST1))->SetTabStops(10); // Tabulatoren

((CListBox*)GetDlgItem(IDC_LIST1))->InsertString(Index, cZeile.c_str()); // Zeilen in Listbox eintragen

}

Vielen Dank!
Mari

--

zum Seitenanfang zum Seitenende Profil || Suche
001
11.11.2002, 21:11
Retro



Also ich würds zweifellos mit scanf machen:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_scanf.2c_.wscanf.asp

Dann kommen aber bestimmt wieder Individuen die mich als Schweineprogrammierer beschimpfen =)

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
002
11.11.2002, 21:25
WareWolf



Schweineprogrammierer? nie gehört...mach dir nichts draus, ich hab mal einen ganz kurzen Beispielcode hier gepostet, der hatte ein goto n in einer Zeile..was denkste was da los war...

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
003
11.11.2002, 21:41
Mari



Kann mir jemand ein Beispiel geben?
Danke noch einmal!!!
Mari

--

zum Seitenanfang zum Seitenende Profil || Suche
004
11.11.2002, 21:44
snoopdog



meinst du als asl erstes doc steht?? aslo anstatt Speichername doc ?? Hmm ich könnt dir ne C funktionen sagen, kannst du damit was anfangen,oder musses c++ stream sein???

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
005
11.11.2002, 22:09
Mari



Hallo,
es muss ein c++ stream sein. Und ich meine nicht das "doc" als erstes anstatt Speichername steht, sondern nur diese zeilen mit "doc" ausgelesen werden auch wenn zuerst Speichername,Wert steht.
Die zeilen mit Speichername, Wert aber ohne doc sollen nicht ausgelesen werden. Hoffe kennt sich jemand aus!
Danke

--

zum Seitenanfang zum Seitenende Profil || Suche
006
11.11.2002, 22:16
Onkel Dittmeyer



Öhm, du willst also nur Zeilen lesen in der ein "doc" drin vorkommt ja?
Dann würde ich das mit strstr(cZeile.c_str(), "doc"); überprüfen oso
Kenn die Funktion nimmer so gut aber das sollte gehen...

--

zum Seitenanfang zum Seitenende Profil || Suche
007
12.11.2002, 00:11
Leviathan



ist doch egal ob c-funktion oder c++-stream. es gibt ja schliesslich acuh sscanf, und aus einem stream einen sting zu machen ist ja nicht das große problem.

ich würde es auch mit scanf oder sscanf machen, so wie retro gesagt hat. was daran aber schweineprogrammiert sein soll verstehe ich nicht, dann ist doch eher sscanf schweineprogrammiert (eine funktion, die nicht weiss wie viele argumente sie denn gerne hätte ist mir sowieso suspekt).

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
008
13.11.2002, 14:16
the_viking



Wie wärs mit Strtok? Aber für suchen ist strstr oder stristr schon besser.
Hab grad keine MSDN bei mir... Syntax werded ihr wohl suchen müssen!

Quellcode:
char string[] = "Hallo;Das;ist;kein;doc";

char *found = strtok(string,";");

while(found)
{
printf("%s\n",found);
found = strtok(NULL,";");
}

So viel zu strtok...

\E: Was haben eigendlich einige mit gotos?? Ich hab hunderte davon, und es funzt super! Ausserdem wandelt der Compiler Funktionen usw. ja auch in "Gotos" um:
Pseudo-
Quellcode:
function MakeSomething(int n)
{
print(n);
}

[... code]
int j=100;
MakeSomething(j);
[.... code]

macht er zu sowas:
Quellcode:
int j=0;
_pushonstackforfunction(j,MakeSomething);
goto MakeSomething;

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446


Dieser Beitrag wurde am 13.11.2002 um 14:19 von the_viking bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
13.11.2002, 16:32
Tron



funktionsaufrufe und gotos sind doch ein /klein/ wenig was anderes. bei einem goto 'vergisst' man, woher man kam, im gegensatz zu funktionen.

der einzige fall, bei dem ein goto _vielleicht_ noch akzeptabel waere, ist multi-ebenen-break, also wenn man aus einer verschachtelten schleife ganz nach aussen will, aber sowas habe ich selbst schon lange nimmer gesehen.

und konstrukte wie:
blubb:
// viel sinnloses zeug
if (blablubb != blabberablubb) goto blubb;
wer sowas fabriziert, gehoert geschlagen, bis er nimmer weiss, ob er 0 oder 1 ist.

selbst wenn man es logisch richtig gebacken bekommt, verwirrt man dann immernoch den armen optimierer des compilers.

gib GOTO
keine chance

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
010
14.11.2002, 23:09
Leviathan



vor allem c mit seinen mächtigen schlüsselwörtern continue und break und auch return braucht goto eigentlich nicht.

beispiel:
wenn du in einem unterpunkt einer mehrfachauswahl aus einer schleife brechen willst benutze kein switch case, sondern if else if.

der multi-ebenen-break lässt sich auch noch lösen, mit einem wahrheitswert, der vor der äußeren schleife deklariert wird und im fall des milti-ebenen-breaks negiert wird. natürlich muss man dann entsprechende verzweigungen mit break setzen, das ist zwar etwas aufwand, macht den code aber klarer.
andere möglichkeit:
das problem mit funktionen lösen und mit return aus der kompletten funktion und somit auch aus den schleifen springen (einer der gründe, aus denen return auch in void-funktionen erlaubt ist).

multi-ebenen-break ist übrigends einer der schwachpunkte von break.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
011
15.11.2002, 08:43
Kriz



Hm, Prefect war mal der Ansicht, daß goto in C/C++ wichtig wäre. Seine Argumentation habe ich aber leider vergessen...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
012
15.11.2002, 14:07
the_viking



aber so was:

Quellcode:
for(int i=0;i<100;i++)
{
for(int a=0;a<100;a++)
{
   for(int b=0;b<100;b++)
   {
     for(int c=0;c<100;c++)
     {
        if(a*b/c+i == c*b+i/a)
        {
          goto ok;
        }
     }
    }
  }
}
return -1;
ok:
return 1;

Wie willst du das denn mit "breaks" machen (Bei einer while(true)-schleife ist das ganz nützlich, aber bei sowas? (In PHP könnte man einfach break(4) sagen, dann bricht er 4 Schleifen ab. Geht das auch in C/++?)

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
013
15.11.2002, 14:14
Archangel



wieso breaks ?

Quellcode:
int blub(void)
{
for(int i=0;i<100;i++)
{
for(int a=0;a<100;a++)
{
   for(int b=0;b<100;b++)
   {
     for(int c=0;c<100;c++)
     {
        if(a*b/c+i == c*b+i/a)
        {
          return 1;
        }
     }
    }
  }
}

return -1;
}

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
014
15.11.2002, 15:04
Prefect



Ich habe nicht behauptet, daß goto nötig wäre. Man könnte goto aus der Sprache entfernen, genauso wie man alle Vergleichsoperatoren bis auf einen, z.B. <, aus der Sprache entfernen könnte. Man könnte auch for() oder while() aus der Sprache entfernen, und wenn man goto drinläßt könnte man sie beide entfernen.
Mit anderen Worten, C als Programmiersprache würde mit einer sehr viel geringeren Anzahl an syntaktischen Konstrukten auskommen.

Trotzdem gibt es z.B. alle Vergleichsoperatoren <, >, <=, >=, == und !=. Es ist nunmal einfacher, if (a == b) zu schreiben statt if (!(a < b || b < a))

Genauso gibt es eben Situationen (wenn auch zugegebenermaßen wenige), in denen ein goto besser in den logischen Zusammenhang paßt als ein anderes syntaktisches Konstrukt.

Multi-Level-Breaks sind das beste Beispiel. Die "Lösung" mit einer boolean-Variable ist nämlich bestenfalls ein Hack, der den Code schwieriger zu lesen macht; auch ist es manchmal nicht praktikabel, das Schleifenkonstrukt in eine eigene Funktion zu packen so wie Archangel das gezeigt hat.

In reinem C sind gotos auch eine perfekte Möglichkeit, um Cleanups bei Fehlern ordentlich handzuhaben:

Quellcode:
int fn()
{
  blahblah

  p = malloc(...);
  if (!p) goto fail;

  blahblah
  if (error) goto fail_free;

  q = malloc(...);
  if (!q) goto fail_free;

  blahblah

  return 1;

fail_free:
  free(p);
fail:
  return 0;
}

Natürlich könnte man auch eine mörderische Verschachtelung von if()s verwenden, aber die obige Variante ist einfach cleaner.
das problem mit funktionen lösen und mit return aus der kompletten funktion und somit auch aus den schleifen springen (einer der gründe, aus denen return auch in void-funktionen erlaubt ist).

Alle Jubeljahre kommt es auch vor, daß goto auch in anderen Situationen Sinn macht, z.B. als Retry-Sprung.

Bottom-Line: Es gibt ein paar Zusammenhänge, in denen goto einfach in die natürliche Logik eines Programms hineinpaßt. In 95% der Fällen, in denen man an goto denkt (bei Anfängern sind es eher 99,99999% der Fälle) gibt es eine genauso logische Lösung ohne goto. Aber es gibt eben auch die anderen 5%.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche