Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hey leute ich habe ein Problem.

Also ich möchte aus einer Textdatei lesen, und den inhalt in eine varibale speichern, bis ein ";" kommt, dann soll er fortfahren bis zum nächsten ";" usw... bis das Ende der Datei erreicht wurde...

Wie kann ich das nun realisieren?

hab als rumprobiert aber das klappt als nicht :(

Könntet ihr mir bitte weiterhelfen?!?

MfG Artery

Geschrieben

Mit std::getline kannst du aus einem beliebigen Eingabestrom in einen String einlesen und ein Trennzeichen angeben. Deklariert wird diese Funktion in <string>.

while(getline(streamvar, stringvar, ';'))
{
// stringvar verarbeiten
}[/code]

Geschrieben

ja ich benutze nur char arrays, das wird das iwie etwas schwieriger :/ benutze fstream und hatte auch das mit getline schon probiert...

Wie mache ich es denn genau wenn ich jetzt zweidimesionale char arrays habe? In die erste dimension soll immer der Inhalt bis zum semikolon. Wenn das semikolon kommt soll er in der zweiten dimension eins weiter springen und dann das ganze wieder zum nächsten semikolon!

Geschrieben

Benutz keine char-Arrays, wenn du keinen guten Grund dafür hast.

#include <vector>
#include <string>
#include <fstream>

int main()
{
using namespace std;

ifstream file("bla.txt");
vector<string> v;
string line;
while(getline(file, line, ';'))
{
v.push_back(line);
}
}[/code]

Geschrieben

Vielleicht gibt es einen guten Grund.

Nur weil char arrays durch schlechte Programmierung fehleranfälliger sind oder weniger leicht in der Handhabung wie z.B. strings, muss man sie ja nicht komplett meiden, schließlich gehören sie zum Grundwissen.

Artery, da du wohl noch in der Lernphase ist, empfehle ich dir mehrere Methoden auszuprobieren.

Statt dir was vorzukauen, möchte ich lieber fragen, was du bereits versucht hast?

Geschrieben (bearbeitet)

Zum Beispiel aus Kompatibilitätsgründen oder zur Leistungs"optimierung" (Das ist natürlich abhänging von der zu erledigenden Aufgabe und meistens kann mans vernachlässigen)

strings mögen zwar einige Vorteile bringen, aber wenn man diese nicht braucht und mit char arrays umgehen kann, muss man sie ja nicht benutzen.

Edit: Oder einfach nur um Byte Werte abzuspeichern ;)

Bearbeitet von Heinzelmann
Geschrieben

Tut mir leid, ich verstehe noch nicht ganz ...

Zu was sind Char-Arrays kompatibel - ausser zu Char-Arrays natürlich :]?

strings mögen zwar einige Vorteile bringen, aber wenn man diese nicht braucht und mit char arrays umgehen kann, muss man sie ja nicht benutzen.

Wenn Strings Vorteile bieten, warum soll man sie verwerfen? Ich verstehe nicht, worauf Du hinaus willst:|

Geschrieben (bearbeitet)

Also, ich arbeite deswegen mit char arrays, weil ich z.b. mir eine funktion geschrieben habe, die ein char array zentriert ausgibt!

Deswegen brauche ich auch hier char arrays!

Ich hatte jetzt probiert, erstmal das ganze in ein Char array zu packen und dann mit ner while-schleife auseinander pflücken...

€dit: Hab das von eben mal gelöscht, also ich kriege es jetzt hin mit

datei.getline(Profile_raw,sizeof(Profile_raw),';');

Bis zum semikolon einzulesen, jetzt möchte ich aber nicht 6 mal das untereinander und auch noch 6 verschiedene variablen benutzen, wie kann ich das jetzt mit 2 dimensionalen char arrays realisieren??

MfG Artery

Bearbeitet von Artery
Geschrieben
Also, ich arbeite deswegen mit char arrays, weil ich z.b. mir eine funktion geschrieben habe, die ein char array zentriert ausgibt! Deswegen brauche ich auch hier char arrays!

Das ist keine Begründung. Wieso soll man das mit einem Vector, der Strings enthält nicht können? Ich kann die Anzahl der Elemente des Vektors bestimmen und auch die Länge jedes einzelnen Elements.

Bis zum semikolon einzulesen, jetzt möchte ich aber nicht 6 mal das untereinander und auch noch 6 verschiedene variablen benutzen, wie kann ich das jetzt mit 2 dimensionalen char arrays realisieren??

Wieso ein 2D Array?

Ich kann jede Zeile lesen und anhand des Seperators auftrennen z.B. mit Usage - Boost 1.46.1 und über jeden Block iterieren. Es sollte sich auch mit STL Strukturen durchführen lassen.

Geschrieben

Ich verstehe das nicht ganz mit dem Vector und ich benutze lieber im moment char arrays! Da ich da selber dann besser durch blicke. Ich möchte eig jetzt nur eine Lösung um das ganze mit 2D arrays zu realisieren mehr nicht BITTE!

Geschrieben
Ich verstehe das nicht ganz mit dem Vector und ich benutze lieber im moment char arrays! Da ich da selber dann besser durch blicke.

Dann arbeitest Du aber wie unter C und nicht OOP wie unter C++. Du solltest Dich entscheiden, ob Du C programmieren willst oder C++, aber Mischmasch ist nicht sinnvoll. In Deinen ganzen Postings ist kein vollständiger Code zu sehen

Geschrieben

Ich arbeite noch nicht Objektorientiert, benutze aber dennoch c++, da dieses vom handling um einiges einfacher ist als c...

Aber ich glaub ich hab mein Problem gelöst, morgen muss ich es nochmal testen ;) dann geb ich nochmal bescheid!

MfG Artery

Geschrieben
Ich verstehe das nicht ganz mit dem Vector und ich benutze lieber im moment char arrays! Da ich da selber dann besser durch blicke.
Das ist kein guter Grund.

Du machst es dir mit char-Arrays nur unnötig schwer. Du musst auf viel mehr achten und kannst viel mehr falsch machen als mit std::string und std::vector.

Zeig doch mal deinen 2D-Array-Code, dann können wir überlegen, wie wir den umstellen.

Geschrieben

Wie soll ein Anfänger die "Gefahren" von char Arrays kennenlernen, wenn er sie anscheinend völlig ignorieren soll?

Nur, weil etwas gefährlicher ist, heißt das noch lange nicht, dass man es komplett meiden soll. Früher oder später muss man sie mal benutzen und da ist es gut, wenn man damit umgehen kann.

Ich kann nicht mehr sehen, wie sogenannte erfahrene Programmierer Anfängern Tipps geben, wie sie möglichst ineffektiv Fehler vermeiden, indem sie erst gar nicht versuchen mögliche Fehler zu produzieren. Aus Fehlern lernt man bekanntlich am besten.

Scheint so ein Art Forenproblem zu sein, ist nicht das erste mal, dass ich sowas sehe.

Außerdem verstehe ich nicht, was so schlimm daran ist C-Code in C++ zu verwenden, C++ ist schließlich eine Erweiterung von C.

Geschrieben (bearbeitet)
Wie soll ein Anfänger die "Gefahren" von char Arrays kennenlernen, wenn er sie anscheinend völlig ignorieren soll?
Er soll sie gar nicht kennenlernen. Er soll einfach die Finger von char-Arrays lassen. Die braucht man in C++ erst einmal nicht. Wieso soll ein Anfänger Gefahren kennenlernen, die er prima komplett vermeiden kann, bis er etwas sattelfester geworden ist?

Aus Fehlern lernt man bekanntlich am besten.
Erklärst du einem C++-Anfänger auch die Stolperfallen bei Exception Specifications?

Früher oder später muss man sie mal benutzen und da ist es gut, wenn man damit umgehen kann.
Eben, früher oder später. Man kann sehr lange auf char-Arrays verzichten.

Außerdem verstehe ich nicht, was so schlimm daran ist C-Code in C++ zu verwenden
char-Arrays sind Bestandteil von C++, kein "C-Code". Der Unterscheid zu C ist nur, dass man diese Krücke nicht mehr braucht, weil es bessere Lösungen für Strings gibt.

C++ ist schließlich eine Erweiterung von C.
Nein, ist es nicht. C++ ist eine eigenständige Sprache, die in weiten Teilen kompatibel zu C ist. Aber C++ ist keine Erweiterung von C, und C ist keine Teilmenge von C++. Und beide Sprachen entwickeln sich immer weiter voneinander weg. Bearbeitet von Klotzkopp
Geschrieben (bearbeitet)

Ich denke nicht, dass die Schwierigkeit für einen Neuling darin besteht, char-Arrays zu benutzen oder auch darauf zu verzichten, sondern vielmehr darin, dass er sich mangels Wissen nicht in der Sprache orientieren und mit der Sprache arbeiten kann. Per se sind weder char-Arrays böse, noch ist C an sich eine ungeeignete Sprache - allerdings ist es schon so, dass es Datenstrukturen gibt, die für jemanden ohne großartige Erfahrungen leichter zu handlen sind und bei anderen muss er eben mehr acht geben. Und C ist ein offenes Minenfeld für den, der (noch) nicht weiß, was er tut.

Insofern ist es pädagogisch sinnvoll, von C-Code abzuraten und gleich C++ zu programmieren. Und wenn man schon dabei ist, kann man da auch gleich ersteinmal die Containerklassen kennenlernen, die es so gibt. Wenn man später auf den Trichter kommt, dass man viel cooler mit char-Arrays programmieren kann: bitte schön! Dann ist es zumindest eine bewusste Entscheidung.

Wenn ich den Thread hier verfolge, so hat der TO kein Problem mit den Datenstrukturen, sondern ist sich selbst nicht im Klaren, wie er sein Programm strukturieren soll - und ich wette, dementsprechend sieht der Code auch aus (ohne ihm damit zu Nahe treten zu wollen).

Ich kann nicht mehr sehen, wie sogenannte erfahrene Programmierer Anfängern Tipps geben, wie sie möglichst ineffektiv Fehler vermeiden, indem sie erst gar nicht versuchen mögliche Fehler zu produzieren. Aus Fehlern lernt man bekanntlich am besten.

Entschuldige, aber das ist kompletter Nonsens. Man lernt nicht aus Fehlern am besten - oder hast Du in der Schule zunächst gelernt, wie alles nicht funktioniert, um anschließend zu erfahren, dass man es in Wirklichkeit ganz anders macht. Man lernt am meisten, in dem man sich Problemlösungstrategien zu eigen macht; zwar kann man durch eigenes Fehlverhalten, seine Problemlösungsstrategie ändern: effektiv ist das nicht!

Bearbeitet von lilith2k3
Geschrieben
Er soll sie gar nicht kennenlernen. Er soll einfach die Finger von char-Arrays lassen. Die braucht man in C++ erst einmal nicht. Wieso soll ein Anfänger Gefahren kennenlernen, die er prima komplett vermeiden kann, bis er etwas sattelfester geworden ist?

Wer sagt denn, dass man vorher nicht C lernen kann? Wieso soll jemand die Finger von char arrays lassen, das kann ja wohl jeder selbst entscheiden.

Wenn jemand auch schon als Anfänger char arrays benutzen will, dann soll er das doch ruhig tun. Im Übrigen gibt es meiner Meinung nach nichts schwieriges bei der Benutzung von char Arrays. (Aber das ist natürlich Ansichtssache)

Fakt ist, dass Artery sie benutzen will, also kann er das tun und ihm das auszureden pädagogisch ziemlich zweifelhaft, zumal er schon erwähnt hat, das diese ihm mehr zusagen. (Er sollte strings aber nicht ignorieren ;))

Erklärst du einem C++-Anfänger auch die Stolperfallen bei Exception Specifications?

Ja Oo

Eben, früher oder später. Man kann sehr lange auf char-Arrays verzichten.

kann!

char-Arrays sind Bestandteil von C++, kein "C-Code". Der Unterscheid zu C ist nur, dass man diese Krücke nicht mehr braucht, weil es bessere Lösungen für Strings gibt.

Pauschalaussage!

Nein, ist es nicht. C++ ist eine eigenständige Sprache, die in weiten Teilen kompatibel zu C ist. Aber C++ ist keine Erweiterung von C, und C ist keine Teilmenge von C++. Und beide Sprachen entwickeln sich immer weiter voneinander weg.

Darüber kann man streiten, hab schon einige andere Meinungen darüber gelesen und das ist mir ehrlich gesagt egal, denn es beantwortet ja nicht meine Frage.

Worauf ich hinaus will ist die Tatsache, dass Anfängern oft pauschal gesagt wird, dass dies und jenes besser ist und sie von bestimmten Sachen die Finger lassen sollen.

Jeder hat seine eigenes Lernschema und lernt bestimmte Dinge erst später als andere.

Deswegen sollte man ihn nicht zwingen Dinge zu verwenden, die man für besser hält, kann ihm aber ruhig darauf hinweisen.

@lilith2k3

Ich stimme dir größtenteils zu, jedoch bin ich nicht der Meinung, dass man unbedingt C++ vor C lernen sollte. Ich hab zuerst C gelernt um mich in C++ besser zurechtzufinden und das hat super geklappt ;)

Wenn jemand das andersrum macht und damit gut voran kommt, dann ist das auch gut.

Offtopic:

Moment mal, unser Schulsystem soll ein gutes Lernsystem sein? Hab ich was verpasst?

Dass man aus Fehlern "am besten" lernt ist ja wohl ne Tatsache, das liegt einfach in der menschlichen Natur. Platte heiß -> fass ich nicht mehr an

Geschrieben

Wenn jemand auch schon als Anfänger char arrays benutzen will, dann soll er das doch ruhig tun. Im Übrigen gibt es meiner Meinung nach nichts schwieriges bei der Benutzung von char Arrays.

Ich gehe mal bei den Daten, die hier verarbeitet werden sollen, von gewöhnlichen Textdaten aus. Wobei wir dann hier schon diverse Möglichkeiten haben, ASCII basiert oder Unicode basiert, wobei dort zu unterscheiden ist, ob man UTF-8 oder UTF-16 codiert. Wenn man das mit Chararrays korrekt und vollständig bearbeiten will, dann ist das ein nicht unerheblicher Aufwand. Wobei man eben genau das mit Hilfe von Strings library - C++ Reference in C++ umsetzen kann und eben nicht sämtliche Zugriffsoperationen dann händisch durchführt.

Geschrieben (bearbeitet)
Wer sagt denn, dass man vorher nicht C lernen kann?
Niemand. Aber meiner Meinung nach ist es kontraproduktiv, wenn das Ziel ist, dass man C++ lernt. C ist keine Vorbedingung für C++.

Fakt ist, dass Artery sie benutzen will, also kann er das tun und ihm das auszureden pädagogisch ziemlich zweifelhaft, zumal er schon erwähnt hat, das diese ihm mehr zusagen. (Er sollte strings aber nicht ignorieren ;))
Wenn ein Anfänger ein ungeeignetes Werkzeug verwenden möchte, das es ihm nur unnötig schwer macht, sollte man ihn schon auf bessere Alternativen hinweisen.

Pauschalaussage!
Was genau? Das char-Arrays eine Krücke sind?

C hat keinen eigenen Datentyp für Strings. Darum muss man sich mit Arrays behelfen, die die unangenehme Eigenschaft haben, dass ihre Größe feststeht. Wenn man da also flexibel sein will, landet man sofort bei dynamischer Speicherverwaltung. Auch ein Thema mit großem Fehlerpotenzial für Anfänger. Dann kommt hinzu, dass Arrays keine Wertsemantik haben (Zuweisen? Vergleichen? Pech!) und keine Funktionsparameter sein können, sondern dabei zu Zeigern werden. Was dann dazu führt, dass man nur noch einen Zeiger auf den Stringanfang hat, und somit entweder eine Längeninformation oder eine Endmarkierung mitschleppen muss. Bei den meisten anderen Arrays tut man ersteres, bei char-Arrays in der Regel letzteres. Damit hat man dann auch gleich die merkwürdige Konvention, dass char-Zeiger anders als alle anderen Zeiger behandelt werden. Was auch zur Folge hat, dass man an die Nullterminierung denken muss, und alles, was da dran hängt.

Man muss ständig im Hinterkopf haben, was mit der Nullterminierung passiert, ob der Speicher groß genug ist und ob und wann der Speicher wieder freigegeben werden muss.

Das geht in C leider nicht anders. In C++ geht das auch, aber da ist es dann nur noch eine Krücke.

std::string ist ein Typ mit Wertsemantik, der einem das alles erspart.

ch hab zuerst C gelernt um mich in C++ besser zurechtzufinden und das hat super geklappt
Meine Erfahrung ist, dass Leute, die zuerst C und dann C++ gelernt haben, oft eine Art "Tunnelblick" entwickeln und auch in C++ noch so programmieren, als ob es C wäre. Aus dem Denkschema kommt man nicht so einfach wieder raus. Typisches Beispiel: Ausnahmesicherheit. Bearbeitet von Klotzkopp
Geschrieben

Schön das ihr euch alle hier so rege darüber streitet...

Damit das hier (jedenfalls für diesen Thread beendet ist) ich lerne in der schule eigentlich C doch ich benutze aber lieber c++, worauf ich mich auf nur ein paar einfache dinge wie cin cout statt printf scanf und sowas beziehen!

Ich brauch das für ein Projekt, da ich aber gemerkt, das ist besser ist wenn ich das mit dem Dateihandling jetzt lieber in c schreibe, WEIL wir das in der Schule bisher nur in C gemacht haben, da hab ich dann wenigstens alle Befehle auf Papier und meine Zeit reicht jetzt nicht aus mich da komplett reinzufuchsen, desweiteren müsste ich dann auch bei anderen dingen ständig wieder nachfragen!!

Ich kann wenn ihr wollt dann nachher noch meine Lösung posten...

MfG Artery

Geschrieben (bearbeitet)

Ich hab nochmal eine Frage, wie kann ich mit fgets bis zu einem bestimmten Zeichen auslesen??

Ich hatte es jetzt so: fgets(Texte[0],';',SprachausgabeVTOS); doch dann liest er mir so viele Zeichen ein wie das semikolon als Ascii wert hat :/ Also in dem Fall 59...

Ich will aber das er bis zum Semikolon liest mit fgets, wie krieg ich das hin?

MfG Artery

€dit: Bzw. wenn das nicht geht, welche Funktion könnte ich stattdessen verweden??

Bearbeitet von Artery

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...