Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

ich möchte aus einer Datei lesen aber irgendwie will getline mir nichts ausgeben

  // Open the file

  fstream f;

  f.open("111.txt", ios::in);

  if (!f.is_open())

    return Error();



  while (!f.eof())

  {

      f.getline(charstrLine, 80);

  }

  f.close();

111.txt existiert und hat Inhalt. Ich bin mir nicht sicher ob es am Unicode liegt aber selbst wenn sollte es ja irgendwas ausgeben, da die Buchstaben (ohne Umlaute) ja die selben Werte haben, oder? Ich verzweifel beinahe. Sitze schon den ganzen Anbend/Nacht. Sehen dass das nicht funktionier tu ich im Debugmodus. Die werte ändern sich nicht. habe auch schon messageboxes ausgeben wollen. geht nicht.

Infos:

c++ ;)

VS 2010

Win32 Anwendung

non MFC

keine vorkompilierte Header

nichts was ich nicht kenne ATL/STL und so ... ka was das bedeutet... alles aus.

Geschrieben
  De Kaisastiähla schrieb:
Ich bin mir nicht sicher ob es am Unicode liegt aber selbst wenn sollte es ja irgendwas ausgeben
Im gezeigten Code ist nichts, das irgendeine Ausgabe erzeugen könnte.

Zum Code:

  • Wenn du statt fstream ifstream benutzt, kannst du dir das ios::in sparen.
  • open und close benutzt man normalerweise nicht. Für open gibt es den Konstruktor, für close den Destruktor.
  • eof eignet sich nicht als Schleifenbedingung, weil das erst dann true ergibt, wenn das Lesen schon einmal fehlgeschlagen ist.
  • Benutz besser std::getline aus <string>, dann bekommst du keine Probleme, wenn mal eine Zeile mehr als 80 Zeichen hat.
  // Open the file
ifstream f("111.txt";
while (f.getline(charstrLine, 80))
{
}[/code]
Geschrieben

Hi De Kaisastiähla,

der folgende Ansi C Code ließt aus der Datei "C:\Text.txt" die erste Zeile aus.

Ausgegeben werden die ersten 3 Zeichen und eine Zeile tiefer im Ausgabefenster die nächsten 3 Zeichen.

{

char data_1[255]; 


char aa[255];

char bb[255];

FILE *ptr;	

ptr = fopen("C:\\Text.txt", "r");  //Textdatei öffnen

fgets(data_1, 255, ptr);          //Die Zeile wird aus der Textdatei eingelesen	

strcpy(aa, data_1);

strcpy(bb, data_1);

{

char* substr = &aa[0];

aa[3] = '\0';

printf( "Wert 1 aus Zeile 1:    '%s'\n", substr , "%s\n");

}

{

char* substr = &bb[3];

bb[6] = '\0';

printf( "Wert 2 aus Zeile 1:    '%s'\n", substr , "%s\n");

}

if( ptr != NULL )  // Wenn nichts in der Textatei steht, springe nach unten und schliesse die Datei

{

}

 fclose( ptr );		//Textdatei schliessen	

}

Ich hätte mal die Frage, wie ich denn an die letzen 3 Zeichen in der Textdatei herankommen kann, wenn diese nicht in der ersten Zeile der Textdatei stehen, sondern in der zweiten Zeile der Textdatei ?

Was müsste ich im Code dafür ändern ?

Kann mir das jemand erklären.

Gruß

Eleu

Geschrieben
  Eleu schrieb:
der folgende Ansi C Code ließt aus der Datei "C:\Text.txt" die erste Zeile aus.
Hier geht es um C++.
  Eleu schrieb:
Ich hätte mal die Frage
Dann mach dafür bitte einen eigenen Thread auf. Sonst behandeln wir hier zwei komplett unterschiedliche Probleme quer durcheinander.
Geschrieben
  Klotzkopp schrieb:
Im gezeigten Code ist nichts, das irgendeine Ausgabe erzeugen könnte.

Jop, testen kann ich immer nur im mit dem Debugger von VS2010, indem ich die Variablen verfolge. Das haben die echt gut gemacht. In Win32 Anwendungen ist es leider nicht so einfach etwas auszugeben à la prinntf(...) oder weitere. Überzeugt mich vom Gegenteil, würde mich sehr freuen.

  Zitat
Zum Code:

Wenn du statt fstream ifstream benutzt, kannst du dir das ios::in sparen.

Danke, gemacht.

  Zitat
open und close benutzt man normalerweise nicht. Für open gibt es den Konstruktor, für close den Destruktor.

Nochmals danke, feine Sache wenn das für mich erledigt wird. Ich muss dazu sagen, dass wir das in der Uni gelernt haben. Prof obv failed teaching C++.

  Zitat
eof eignet sich nicht als Schleifenbedingung, weil das erst dann true ergibt, wenn das Lesen schon einmal fehlgeschlagen ist.

Hier steht halt das getline den istream zurückgibt. Deinem Code entnehme ich dann, dass ein leerer istream NULL/0/false ist. Ist das immer so?

  Zitat
Benutz besser std::getline aus <string>, dann bekommst du keine Probleme, wenn mal eine Zeile mehr als 80 Zeichen hat.

Naja würde ich gern aber ich brauche hinterher nen CSting wegen seinen angenemen Operationen und Möglichkeit ihn zu kovertieren. Ich habe schon ne weile nach casts von Std::string zu jeglichen (unnötig vielen) Stringarten gesucht, aber das scheint mir nicht so einfach wie der CString. Hier habe ich eine Lösung gefunden. Nur nicht für den Std::string.

Danke für die kompetente Hilfe.

Geschrieben
  De Kaisastiähla schrieb:
Anwendungen ist es leider nicht so einfach etwas auszugeben à la prinntf(...) oder weitere.
Mit OutputDebugString kannst du einen Text im Debug-Fenster ausgeben lassen (oder mit DebugView mitlesen).
  De Kaisastiähla schrieb:
feine Sache wenn das für mich erledigt wird.
Das Konzept nennt sich RAII
  De Kaisastiähla schrieb:
Ich muss dazu sagen, dass wir das in der Uni gelernt haben. Prof obv failed teaching C++.
Kommt vermutlich von C.
  De Kaisastiähla schrieb:
Deinem Code entnehme ich dann, dass ein leerer istream NULL/0/false ist.
So ähnlich. Wenn du ein stream-Objekt in einem Kontext benutzt, wo ein Wahrheitswehrt gefragt ist, entspricht der Wert dem negierten Rückgabewert von fail().
  De Kaisastiähla schrieb:
Ist das immer so?
Immer, wenn das badbit oder das failbit des Streams gesetzt ist: Wenn die Datei nicht geöffnet werden konnte, wenn du am Dateiende angelangt bist, wenn du mit >> in den falschen Typ einliest.
  De Kaisastiähla schrieb:
Hier habe ich eine Lösung gefunden. Nur nicht für den Std::string.
std::string ist ein typedef von std::basic_string, der ist auf dieser Seite auch gelistet.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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.

Weiterlesen  

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...