mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [C++] Nur Probleme jetzt mit getline()


Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo miteinander

Ich bin ganz leicht frustriert was meine bisherigen Erfolge in C++ 
angeht:
Nach etwa 2 Jahren C und kurzes reinschauen in HTML, PHP und Java nahm 
ich wirklich an, dass es nicht soo kompliziert sein sollte sich mit c++ 
anzufreunden.
Doch leider wurde ich schwer entteuscht.
Jededsmahl wenn man etwas neues ausprobieren will, werden einem ganze 
Berge in den Weg gestellt:
gestern versuchte ich den ganzen Tag einen String an einem Label oder 
einer Textbox auszugeben, ohne erforlg. die Programm-Strings sind 
Standart, aber die GUI-Strings sind Systemstrings. Ich habe etwa 5 
verschiedene Varianten versucht, diese Strings zu konvertieren von 
marshall über convert.tostring, doch nichts ging. also habe ichs 
aufgegeben.
Wofür braucht so ein scheiss überhaupt ein zwei verschiedene Strings?


Jetzt aber zu meinem eigentlichen Problem:
Wie kann ich aus einem .txt File Daten BRAUCHBAR einlesen, verarbeiten 
und ausgeben??
Das speichern läuft ohne Probleme mit ofstream. aber ifstream ist so ne 
Sache.
Ich habe mehrmals dieses Beispiel im Internet gefunden:
ifstream fin("eingabe.txt");
ofstream fout("ausgabe.txt");
string zeile;
while(getline(fin,zeile))//zeilenweise einlesen
{
  verarbeite(zeile);//hier kannst du dich austoben ;)
  fout<<zeile<<endl;
} 
Doch wie so oft, wurde ich hier auch wieder enttäuscht:
getline() als solches funktioniert nicht, da niergends die Klasse 
aufgerufen wurde. mache ich aber aus getline fin.getline(fin,zeile) 
gehts auch nicht da irgendwie das erste Argument nicht in ein char* 
umgewandelt werden konnte.

Dabei ist doch das was ich will nicht so schwer: Textdatei zeilenweise 
auslesen, Werte die durch ein ',' getrennt sind separat in einer array 
speichern.

Ich hoffe, ihr könnt mir noch ein wenig wieder spass an dieser 
Programmiersprache geben...
MFG
P51D

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du denn mal in die Dokumentation von ifstream und ofstream 
hineingesehen?
Hast Du Dir angesehen, wie deren Memberfunktionen ("Methoden") heißen?





> mache ich aber aus getline fin.getline(fin,zeile)
> gehts auch nicht da irgendwie das erste Argument nicht in ein char*
> umgewandelt werden konnte.


Kein Wunder.

http://www.cplusplus.com/reference/iostream/istream/getline/

Einerseits erwartet ifstream::getline als erstes Argument keine Referenz 
auf sich selbst, andererseits arbeitet getline mit einzelnen Zeichen, 
nicht mit string.

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die hier wie im Beispiel arbeitet mit std::string, ist keine 
Memberfunktion, aber es sagt ja niemand dass es auch zwingend eine sein 
muss.

http://www.cplusplus.com/reference/string/getline/

> getline() als solches funktioniert nicht, da niergends die Klasse
> aufgerufen wurde.

ist eine merkwuerdige Fehlerbeschreibung.

Cheers, Roger

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich habe mehrmals dieses Beispiel im Internet gefunden:
 ifstream fin("eingabe.txt");
 ofstream fout("ausgabe.txt");
 string zeile;
 while(getline(fin,zeile))//zeilenweise einlesen
 {
   verarbeite(zeile);//hier kannst du dich austoben ;)
   fout<<zeile<<endl;
 } 

Sieht soweit gut aus.

> getline() als solches funktioniert nicht, da niergends die Klasse
> aufgerufen wurde.

Was meinst du mit "die Klasse aufgerufen"? Welche Klasse? Außerdem kann 
man eine Klasse nicht aufrufen. Und was meinst du mit "funktioniert 
nicht"? Was passiert denn statt des Einlesens? Kannst du mal das gesamte 
Programm zeigen, statt nur einen Ausschnitt?

> mache ich aber aus getline fin.getline(fin,zeile)
> gehts auch nicht da irgendwie das erste Argument nicht in ein char*
> umgewandelt werden konnte.

Was ließ dich annehmen, daß das funktionieren könnte?

> Ich hoffe, ihr könnt mir noch ein wenig wieder spass an dieser
> Programmiersprache geben...

Auch wenn's dich desillusionieren mag: Mit willkürlichem Eingeben 
irgendeines Codes wird sich dein Spaß in Grenzen halten.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick B. schrieb:
> gestern versuchte ich den ganzen Tag einen String an einem Label oder
> einer Textbox auszugeben, ohne erforlg. die Programm-Strings sind
> Standart, aber die GUI-Strings sind Systemstrings. Ich habe etwa 5
> verschiedene Varianten versucht, diese Strings zu konvertieren von
> marshall über convert.tostring, doch nichts ging. also habe ichs
> aufgegeben.
> Wofür braucht so ein scheiss überhaupt ein zwei verschiedene Strings?

Weil auch C++ anfangs kein wirkliches Konzept hatte, um mit jedem 
beliebigen Zeichensatz auf diesem Planeten klarzukommen. Also hat man 
sich auf ASCII beschränkt. GUI können sich das aber nicht erlauben.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Compiler benutzt du?

Der C++ Compiler vom Visual Studio 6 hatte so seine Probleme mit den 
Standardlibraries. Unter anderem erinnere ich mich an Bugs in getline.

http://www.edcc.edu/faculty/paul.bladek/getline_fix.htm

Autor: Jean (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
hört sich für nach Visual Studio an. Dann würde ich dir empfehlen deren 
funktionen uch zu nutzen. System::IO::File::WriteAllBytes und 
ReadAllBytes sind da dein Freund falls du mit cli::array arbeiten 
willst.
Bei System::String bieten sich die Funtionen WriteAllText und 
ReadAllText an.

Falls du lieber mit str oder char arbeitest, kannst du z.B. mit der 
unteren Funktion String in char wandeln(musste ich mir auch selber 
zusammen knobeln).
void copyw(String ^in, char* out)
    {
      for(int i=0;i<in->Length;i++)
      {
        out[i] = (char)in[i];
      }

      out[in->Length]='\0';
    }

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das was du da verbrichst ist Managed C++. Er programmiert aber normales 
C, so wie es aussieht.

Visual Studio heißt nicht unbedingt, dass man .NET benutzen muss.

Autor: Udo R. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs vieleicht mal mit c# (wenn Du hauptsählich Oberflächen unter 
Windows programmierst) oder evt. Java wenn es auch andere 
Betriebssysteme sein sollen und versuche die objektorientierten Konzepte 
zu verstehen.

Ich habe 7 Jahre c programmiert und habe c++ nur gehasst. Jetzt mögen 
Kommentare kommen wie "Warst zu blöd" aber das sind die Leute die meinen 
man braucht die Maxwellschen Gleichungen um in einem Widerstand Strom 
und Spannung zu berechnen :-)

C++ ist und bleibt ein häslicher Hybrid mit dem man viel zu viel Mist 
machen kann.

Gruß, Udo

Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Hast Du denn mal in die Dokumentation von ifstream und ofstream
> hineingesehen?
> Hast Du Dir angesehen, wie deren Memberfunktionen ("Methoden") heißen?
Ich habe mich hauptsächlich in "C für PC's" (Literatur), 
http://msdn.microsoft.com/de-de/library/default.aspx und hier 
schlaugemacht:
http://www.willemer.de/informatik/cpp/fileop.htm


> Einerseits erwartet ifstream::getline als erstes Argument keine Referenz
> auf sich selbst, andererseits arbeitet getline mit einzelnen Zeichen,
> nicht mit string.
Ist aber nicht logisch, wie soll dann das Beispiel Funktionieren, wenn 
der 1. Parameter nicht das File selber sein soll.

Roger Steiner schrieb:
>> getline() als solches funktioniert nicht, da niergends die Klasse
>> aufgerufen wurde.

>ist eine merkwuerdige Fehlerbeschreibung.
wiso merkwürdig? so wie ich das mit den Klassen und der Vererbung 
begriffen habe (und das heisst noch nicht, dass ich richtig liege) muss 
doch getline so aufgerufen werden:
fstream::getline();
//////////////
oder
fstream file;
file.getline();
fstream ist hier doch die Klasse, oder nicht??


Rolf Magnus schrieb:
> Und was meinst du mit "funktioniert nicht"? Was passiert denn statt des
> Einlesens? Kannst du mal das gesamte
> Programm zeigen, statt nur einen Ausschnitt?
Ich bin einfach nur ein wenig am Experimentieren und für ein späteres 
Projekt wollte ich mir mal das Filehandling etwas aneignen.
Hier ist der C-Teil, der abgearbeitet wird, sobalt ein Button gedrückt 
wurde. Der Rest ist nicht weiter Interessant
ifstream fin("muster.txt");  
ofstream fout("test_out.txt");
string zeile;
if(fin.good()){          // Wenn die Datei geöffnet werden konnte
  fin.seekg(0L, ios::beg);  // an den Anfang der Datei springen
  while(getline(fin,zeile)){  // Solange das Ende der Datei noch nicht erreicht ist
    fout << zeile; 
  }
}
fin.close();
fout.close();
ok, dies ist genau das gleiche, wie im Beispiel, nur schreibe ich hier 
das Eingelesene wieder in eine andere Datei, um zu sehen was passiert.
> ...Form1.h(250) : error C3861: "getline": Bezeichner wurde nicht
> gefunden.
> ...Form1.h(251) : error C2679: Binärer Operator '<<': Es konnte kein
> Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ
> 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)
> ...Microsoft Visual Studio 9.0\VC\include\ostream(653): kann
> 'std::basic_ostream<_Elem,_Traits> &std::operator
> <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits>
> &,const char *)' sein
und so weiter....

Rolf Magnus schrieb:
>> mache ich aber aus getline fin.getline(fin,zeile)
>> gehts auch nicht da irgendwie das erste Argument nicht in ein char*
>> umgewandelt werden konnte.

> Was ließ dich annehmen, daß das funktionieren könnte?
getline() kann als solches nicht einfach dastehen??
=> http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Klassen

Karl heinz Buchegger schrieb:
> Welchen Compiler benutzt du?
Ich arbeite mit Visual C++ Express Edition 2008 mit SP1

Simon K. schrieb:
> Das was du da verbrichst ist Managed C++. Er programmiert aber normales
> C, so wie es aussieht.
C für Mikrocontroller, ja, und da bin ich so wies die anderen in der 
Schule sagen nicht gerade schlecht (aber von mir aus gesehen auch nicht 
gerade sehr gut, gibt ja immer etwas neues zu lernen...).

Udo R. S schrieb:
> Ich habe 7 Jahre c programmiert und habe c++ nur gehasst. Jetzt mögen
> Kommentare kommen wie "Warst zu blöd" aber das sind die Leute die meinen
> man braucht die Maxwellschen Gleichungen um in einem Widerstand Strom
> und Spannung zu berechnen :-)
Ich kann dir nachempfinden. Bin selber Elektroniker (URI-Gesetz läst 
grüssen).
Das mit dem zu blöd, weiss nicht so recht. Ich habe bis jetzt noch nie 
eine Programmiersprache gesehen, die so extrem unübersichtlich und 
kompliziert ist wie c++. In der Schule haben wir das Thema Basic, 
Assembler, C und jetzt OOP C++. Basic und Assembler wollte der Lehrer 
begreiflicherweise nicht gross behandeln, aber beim C haben wir jetzt 
schon sehr gute Eigenschaften erarbeitet, da dies je nach späterem 
Fachgebiet das Täglich Brot ist.

Bin immer offen für neus, und bin auch lernwillig, von daher nach einer 
Nacht darüber schlafen möchte ich die Sache wider angehen.

Danke für die zahlreichen Antworten
Patrick

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick B. schrieb:

> wiso merkwürdig? so wie ich das mit den Klassen und der Vererbung
> begriffen habe (und das heisst noch nicht, dass ich richtig liege) muss
> doch getline so aufgerufen werden:
>
> fstream::getline();
> //////////////
> oder
> fstream file;
> file.getline();
> 
> fstream ist hier doch die Klasse, oder nicht??
>


Es gibt 2 getline.

Das eine ist ein Member der Klasse und kann Strings in C-Arrays 
einlesen. Das andere getline ist eine freistehende Funktion, also keiner 
Klasse zugehörig und liest in einen std::string ein.

Nicht alle Funktionen in C++ sind Member einer Klasse.
Das hat zum Teil auch historische Ursachen (und viele wünschten das 
Normierungskommite würde endlich reagieren und das abstellen). Die 
std::string Klasse zb ist erst sehr spät zu C++ hinzugekommen und man 
wollte die in der Norm nicht mehr an allen Ecken und Enden einbauen. 
Daher gibt es des öfteren keine Funktionalität, die mit std::string 
arbeitet, obwohl sie es eigentlich sollte, sondern stattdessen C-Strings 
(also Array, Pointer) benutzt.

zb. gibt es keinen Konstruktor für Filestreams, der std::string für 
Dateinamen nimmt, etc ...

(Ist ein "Pain in the Ass" und ich gebe dir recht, dass das alles andere 
als suboptimal ist. Ist aber so und wird auch weiterhin so bleiben. Das 
Komitee ist nicht sehr reformfreudig, was vorhandene Funktionalität 
angeht - aus gutem Grund.)

>> Und was meinst du mit "funktioniert nicht"? Was passiert denn statt des
>> Einlesens? Kannst du mal das gesamte
>> Programm zeigen, statt nur einen Ausschnitt?
> Ich bin einfach nur ein wenig am Experimentieren und für ein späteres
> Projekt wollte ich mir mal das Filehandling etwas aneignen.

Alles schön und gut.
Trotzdem kann niemand mit der Aussage "funktioniert nicht" viel 
anfangen.

>> ...Form1.h(250) : error C3861: "getline": Bezeichner wurde nicht
>> gefunden.

Ah. Da liegt der Hase.
Für das freistehende getline brauchst du den Header
#include <string>

>> ...Form1.h(251) : error C2679: Binärer Operator '<<': Es konnte kein
>> Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ
>> 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)
>> ...Microsoft Visual Studio 9.0\VC\include\ostream(653): kann
>> 'std::basic_ostream<_Elem,_Traits> &std::operator
>> <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits>
>> &,const char *)' sein
> und so weiter....

Alles derselbe Fehler:
#include <string>

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dabei ist doch das was ich will nicht so schwer: Textdatei
> zeilenweise auslesen, Werte die durch ein ',' getrennt sind
> separat in einer array speichern.

Das kann in C++ so einfach sein wie:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

int main()
{
  std::ifstream fin( "eingabe.txt" );
  std::vector< std::string > allItems;
  std::string item;

  while( getline( fin, item, ',' ) )
  {
    allItems.push_back( item );
  }
  
  for( size_t i = 0; i < allItems.size(); ++i )
    std::cout << allItems[i] << std::endl;
}

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Einerseits erwartet ifstream::getline als erstes Argument keine Referenz
>> auf sich selbst, andererseits arbeitet getline mit einzelnen Zeichen,
>> nicht mit string.
> Ist aber nicht logisch, wie soll dann das Beispiel Funktionieren, wenn
> der 1. Parameter nicht das File selber sein soll.

Na, weil es als Memberfunktion einer Instanz der Klasse ifstream 
aufgerufen wird. Was mag wohl ein this-Pointer sein, und wozu ist der 
da?

Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Ah. Da liegt der Hase.
> Für das freistehende getline brauchst du den Header
> #include <string>

LOL, wozu ist das Internet da, wenn man doch nie etwas brachbares 
findet???

Hier habe ich übrigends das Beispiel her:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-...

Danke übrigens für das Beispiel.
Könntest du es noch kommentieren??
Wofür ist das gut?
std::vector< std::string > allItems;
....
allItems.push_back( item );
....
for( size_t i = 0; i < allItems.size(); ++i )  // size_t? allItems.size()?
  std::cout << allItems[i] << std::endl;
Vom Code her würde ich sagen, dass allItems eine Array ist, aber sie 
wird nicht wie eine normale Array initialisiert.
Was habe ich dann für eine Ausgabe der Werte (welches Format und welchen 
Variablentyp: sting, char, int), wenn die Datei eingabe.txt so aussieht?
> 3,1024,496,4095,15
> 24,255,167,3478,13
... beliebig lang

damit ich zum Beispiel alle Werte der 1. Spallte in eine Array birnge, 
alle der 2. und alle der 3. Spalte, muss ich da split() verwenden?

MFG
Patrick

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick B. schrieb:
> Karl heinz Buchegger schrieb:
>> Ah. Da liegt der Hase.
>> Für das freistehende getline brauchst du den Header
>> #include <string>
>
> LOL, wozu ist das Internet da, wenn man doch nie etwas brachbares
> findet???

Du sollst eine Programmiersprache wie C++ auch nicht versuchen dadurch 
zu lernen, dass du dir irgendwelche Codeschnipsel aus Foren 
zusammensuchst.

Kauf dir ein Buch!

> Hier habe ich übrigends das Beispiel her:
> 
http://www.c-plusplus.de/forum/viewtopic-var-t-is-...

Das ist nicht vollständig.

>
> Danke übrigens für das Beispiel.
> Könntest du es noch kommentieren??
> Wofür ist das gut?

Was ein Vector ist, was es da sonst noch so alles gibt und wie man ihn 
benutzt, findest du alles in einem Buch.

Und du findest das auch noch in einer Reihenfolge, so dass alles 
sinnvoll aufeinander aufbaut.

Solange du keine vernünftige Literatur hast, wird das Erlernen einer 
Programmiersprache immer ein frustrierendes Erlebnis bleiben.

> Vom Code her würde ich sagen, dass allItems eine Array ist, aber sie
> wird nicht wie eine normale Array initialisiert.

Es ist ein vector.
Grob gesagt: Ein Array das sich selbst je nach Bedarf vergrößert.

> Was habe ich dann für eine Ausgabe der Werte (welches Format und welchen
> Variablentyp: sting, char, int), wenn die Datei eingabe.txt so aussieht?
>> 3,1024,496,4095,15
>> 24,255,167,3478,13
> ... beliebig lang

Probiers aus.
Allerdings hast du bis jetzt nur Strings und keine Zahlen :-)

> damit ich zum Beispiel alle Werte der 1. Spallte in eine Array birnge,
> alle der 2. und alle der 3. Spalte, muss ich da split() verwenden?

Kann man.
Der C++ Weg wäre zb. mit dem String einer Zeile einen Stringstream 
aufbauen und von dort mit Streamoperationen lesen.

Allerdings wäre auch interessant, ob die Zahlen einer Zeile zueinander 
in einer Beziehung stehen, wie zb. das sind die Koordinaten eines 
Rechtecks. Dann wäre der C++ Weg nicht mit 5 Arrays zu arbeiten, sondern 
sich eine Klasse für ein Rechteck zu machen. Ein Rechteck Objekt selbst 
weiß dann, wie es sich von einem File zu lesen hat.

Autor: Rex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur mal so zum Vergleich im vielgeschmähten VB.NET


  Dim strContent As String = File.ReadAllText(strFileName)
  Dim strLines() As String = Split(strContent, vbCrLf)
  'verwurste hier die Zeilen
  strContent = Join(strLines, vbCrLf)
  File.WriteAllText(strFileName, strContent)


Also für mich steht C echt für "cryptic".. :-)

Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Kauf dir ein Buch!
Hab ich, ist leider noch nicht geliefert worden.


>> Hier habe ich übrigends das Beispiel her:
>>
> 
http://www.c-plusplus.de/forum/viewtopic-var-t-is-...
>
> Das ist nicht vollständig.
Das habe ich gemerkt.


> Solange du keine vernünftige Literatur hast, wird das Erlernen einer
> Programmiersprache immer ein frustrierendes Erlebnis bleiben.
War bei PHP aber nicht ganz so schlimm und bei C auch nicht. Das www ist 
gross. Leider gibts nicht nur vernünfiges und funktionierendes...


> Probiers aus.
> Allerdings hast du bis jetzt nur Strings und keine Zahlen :-)
schön nach dem Moto: Jeder hilft dir gerne, aber keiner wird dir die 
Hausaufgaben machen...
Hab kein Problem damit. Werde zwar später mal wieder irgendwo Hilfe 
brauchen, aber ich nehme an, dass mir hier gerne geholfen wird.

> Kann man.
> Der C++ Weg wäre zb. mit dem String einer Zeile einen Stringstream
> aufbauen und von dort mit Streamoperationen lesen.
Ok, ich glaub, jetzt habe ich alles notiert, was ich nachschlagen muss, 
sollte...

Danke für die Hilfe.
MFG
Patrick

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rex schrieb:
> Nur mal so zum Vergleich im vielgeschmähten VB.NET
>
>
>   Dim strContent As String = File.ReadAllText(strFileName)
>   Dim strLines() As String = Split(strContent, vbCrLf)
>   'verwurste hier die Zeilen
>   strContent = Join(strLines, vbCrLf)
>   File.WriteAllText(strFileName, strContent)
>
>
> Also für mich steht C echt für "cryptic".. :-)

OK.
Und jetzt das ganze noch einmal, wobei wir auch gerne eine 
Fehlerbehandlung hätten und vorschreiben, dass pro Zeile exakt 5 
Einträge vorhanden sein sollen :-)

Autor: Rex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wenn man beim Verwursten keine Fehler einbaut, sollte der Rest 
schon funktionieren.. (also ok, Datei muß da sein, Schreibrechte...)

Und die Zeile filetiert man bequem mit

Dim strFields() As String = Split(strLines(i), ",")

Funktioniert übrigens sogar mit verschiedensten Zeichensätzen. So ein 
"split" wird es doch in C auch geben?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> So ein "split" wird es doch in C auch geben?

Reden wir jetzt von C oder C++?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rex schrieb:
> also wenn man beim Verwursten keine Fehler einbaut, sollte der Rest
> schon funktionieren.. (also ok, Datei muß da sein, Schreibrechte...)

Darum gehts nicht.
Es soll schon vorgekommen sein, dass einzulesende Dateien Fehler in den 
Daten hatten :-)

> Funktioniert übrigens sogar mit verschiedensten Zeichensätzen. So ein
> "split" wird es doch in C auch geben?

In den boost Bibliotheken gibt es eines.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rex schrieb:
> also wenn man beim Verwursten keine Fehler einbaut, sollte der Rest
> schon funktionieren.. (also ok, Datei muß da sein, Schreibrechte...)
>
> Und die Zeile filetiert man bequem mit
>
> Dim strFields() As String = Split(strLines(i), ",")
>
> Funktioniert übrigens sogar mit verschiedensten Zeichensätzen. So ein
> "split" wird es doch in C auch geben?

Wird das wieder C/C++ Hetze? ;)

"In C" gibt es erst mal gar nichts. Alles Funktionen werden durch 
externe Bibliotheken oder durch c/cpp Dateien eingebunden.
Man muss also für die "split" Fähigkeit einfach nur die richtige 
Bibliothek benutzen oder die Funktion selber schreiben.

C ist einfach logischer als Basic. Deswegen gibt es auch eine 
(namentliche) Trennung von Compiler und Standardbibliothek. Bei Basic 
ist beides einfach "Basic".

Autor: Rex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich will nicht hetzen, ich hab auch in beiden Sprachen schon 
programmiert. Es ist mir nur aufgefallen, daß gerade Anfänger mit so 
einfachen Dingen bei C sehr viel Zeit verbringen.

@Karl-Heinz

Also gut, dann noch die gewünschte Fehlerbehandlung für Wurstscheiben, 
die Strings sind:

try
  myInt = CInt(wurstscheibe)
catch
  'wirf Wurstscheibe weg
end try

:-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.