Problem beim aulesen mit streams in VS C++

Und eine problem hab ich dann doch noch.

Wie kann ich eine zeile löschen. Also zum Beispiel die zweite und die anderen bleiben bestehen
Wäre nett wenn du dies gleich mit beispiel machen würdest.


Danke schonmal im Voraus.

MFG tmace85.
 
moin


Code:
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
	char Array[100*100];
	char temp;
	int index = 0;
	int zaehler = 0;
	int auswahl = 0;
	ifstream datei("test.txt");

	while((temp = datei.get()) != EOF)
	{
		Array[index++] = temp;
		Array[index] = '\0';
	}
	datei.close();

	cout<<"Zeile: ";
	cin>> auswahl;

	//Titelanfang finden
	index = 0;
	while(zaehler != auswahl-1)
	{
		if(Array[index] == '\n')
			zaehler++;
		index++;
	}
	while(Array[index] != '\n')
		cout<<Array[index++];


	return 0;
}


Wie kann ich eine zeile löschen. Also zum Beispiel die zweite und die anderen bleiben bestehen
Wäre nett wenn du dies gleich mit beispiel machen würdest.
Ich schreib dir doch dein Programm nicht fertig.
Du löscht die Zeile aus dem Array, löscht den alten Inhalt der Datei und packst das Array wieder rein.


mfg
umbrasaxum
 
Ne das ist nur ein kleiner Teil des Programms das ich fertig stellen muss. Aber trotzdem danke. Du hast mir echt sehr viel weiter geholfen.

Tausend dank.

MFG tmace85

P.S. Schönen Tag noch
 
Ich habe das Programm umgeschrieben so das ich erst die 1. Zeile dann die 2. Zeile usw ausgeben kann um zu testen ob dies auch funktioniert.

Nun habe ich 2 weitere Probleme:

1. Das Programm gibt beim Ausgeben der 3. Zeile erst die 2. Zeile und dann die 1. Zeile aus

und

2.Es stürzt beim weiteren Programmablauf einfach ab und gibt ne Fehlermeldung aus.

"Unbehandelte Ausnahme bei 0x0041b5f6 in einzelne zeile lesen.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0x00137000."

In diesem Programm lese ich 3 char arrays ein und speichere sie in einer Textdatei. Danach gebe ich diese gespeicherten Werte wieder aus und füge der Textdatei ein Element hinzu. Dann gebe ich alle Zeilen nochmals aus inklusive der hinzugefügten Zeile.

Danke für eure Hilfe.

Code:


#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
//--------------------------------------------------------------------------------------------
//1. Variablen Deklaration
char t[100*100];
char v[100*100];
char x[100*100];
char b[100*100];

char temp; // Zum auslesen der Einzelnen Zeilen
int index = 0;
int zaehler = 0;
int auswahl = 0;
char Array[100*100];

//char name[255];
//--------------------------------------------------------------------------------------------
//2.Einlesen in Variablen
cout<<"Bitte geben sie was ein: ";
cin.getline(t,100); // Einlesen mit Lehrzeile

cout<<endl;

cout<<"Bitte geben sie noch was ein: ";
cin.getline(x,100); // Einlesen mit Lehrzeile

cout<<endl;

cout<<"Bitte geben sie wieder was ein: ";
cin.getline(v,100); // Einlesen mit Lehrzeile




//--------------------------------------------------------------------------------------------
//3.Einlesen in eine Textdatei und speichern

system("CLS");
/*
cout<<"Geben Sie den Dateinamen in der Datei in der sie Speicher wollen ein: ";
cin.getline(name,255);
*/

ofstream file("Kassette01.txt");
file<<t<<endl;
file<<v<<endl;
file<<x<<endl;
file.close();




//--------------------------------------------------------------------------------------------
//4.1 Auslesen der einzelnen der 1. Zeile der Textdatei

ifstream datei01("Kassette01.txt"); // Datei öffnen zum lesen

while((temp = datei01.get()) != EOF)
{
Array[index++] = temp;
Array[index] = '\0';
}
datei01.close(); // Datei wieder schließen

auswahl = 1;
index = 0;
while(zaehler != auswahl-1)
{
if(Array[index] == '\n')
zaehler++;
index++;
}
cout<<"1. Zeile: ";
cout<< " ";
while(Array[index] != '\n')
{
cout<<Array[index++];
}

cout<<endl;

//--------------------------------------------------------------------------------------------
//4.2 Auslesen der einzelnen der 2. Zeile der Textdatei

ifstream datei02("Kassette01.txt"); // Datei öffnen zum lesen

while((temp = datei02.get()) != EOF)
{
Array[index++] = temp;
Array[index] = '\0';
}
datei02.close(); // Datei wieder schließen

auswahl = 2;
index = 0;
while(zaehler != auswahl-1)
{
if(Array[index] == '\n')
zaehler++;
index++;
}
cout<<"2. Zeile: ";
cout<< " ";
while(Array[index] != '\n')
{
cout<<Array[index++];
}

cout<<endl;

//--------------------------------------------------------------------------------------------
//4.3 Auslesen der einzelnen der 3. Zeile der Textdatei

ifstream datei03("Kassette01.txt"); // Datei öffnen zum lesen

while((temp = datei03.get()) != EOF)
{
Array[index++] = temp;
Array[index] = '\0';
}
datei03.close(); // Datei wieder schließen

auswahl = 3;
index = 0;

//Titelanfang finden
while(zaehler != auswahl-1)
{
if(Array[index] == '\n')
zaehler++;
index++;
}
cout<<"3. Zeile: ";
cout<< " ";
while(Array[index] != '\n')
{
cout<<Array[index++];
}

cout<<endl;
system("PAUSE");


//--------------------------------------------------------------------------------------------
//5.Dateien anhängen

system("CLS");

ofstream file01("Kassette01.txt", ios_base::app);
cout<<"Bitte geben sie noch etwas ein: ";
cin.getline(b,100);
file01<<b;
file01.close();

//--------------------------------------------------------------------------------------------
//6.1 Wieder auslesen der 1. Zeile der Textdatei

ifstream datei04("Kassette01.txt"); // Datei öffnen zum lesen

while((temp = datei04.get()) != EOF)
{
Array[index++] = temp;
Array[index] = '\0';
}
datei04.close(); // Datei wieder schließen

auswahl = 1;
index = 0;
while(zaehler != auswahl-1)
{
if(Array[index] == '\n')
zaehler++;
index++;
}
cout<<"1. Zeile: ";
cout<< " ";
while(Array[index] != '\n')
{
cout<<Array[index++];
}

cout<<endl;


//--------------------------------------------------------------------------------------------
//6.2 Wieder auslesen der 2. Zeile der Textdatei

ifstream datei05("Kassette01.txt"); // Datei öffnen zum lesen

while((temp = datei05.get()) != EOF)
{
Array[index++] = temp;
Array[index] = '\0';
}
datei05.close(); // Datei wieder schließen

auswahl = 2;
index = 0;
while(zaehler != auswahl-1)
{
if(Array[index] == '\n')
zaehler++;
index++;
}
cout<<"2. Zeile: ";
cout<< " ";
while(Array[index] != '\n')
{
cout<<Array[index++];
}

cout<<endl;


//--------------------------------------------------------------------------------------------
//6.3 Wieder auslesen der 3. Zeile der Textdatei

ifstream datei06("Kassette01.txt"); // Datei öffnen zum lesen

while((temp = datei06.get()) != EOF)
{
Array[index++] = temp;
Array[index] = '\0';
}
datei06.close(); // Datei wieder schließen

auswahl = 3;
index = 0;
while(zaehler != auswahl-1)
{
if(Array[index] == '\n')
zaehler++;
index++;
}
cout<<"3. Zeile: ";
cout<< " ";
while(Array[index] != '\n')
{
cout<<Array[index++];
}

cout<<endl;


//--------------------------------------------------------------------------------------------
//6.4 auslesen der hinzugefügten Zeile der Textdatei

ifstream datei07("Kassette01.txt"); // Datei öffnen zum lesen

while((temp = datei07.get()) != EOF)
{
Array[index++] = temp;
Array[index] = '\0';
}
datei07.close(); // Datei wieder schließen

auswahl = 4;
index = 0;
while(zaehler != auswahl-1)
{
if(Array[index] == '\n')
zaehler++;
index++;
}
cout<<"Angehängte Zeile: ";
cout<< " ";
while(Array[index] != '\n')
{
cout<<Array[index++];
}

cout<<endl;



//--------------------------------------------------------------------------------------------
//7.Ende des Programms

system("PAUSE");
return 0;
}

DANKE IM VORAUS

MFG tmace85

P.S. Schönen Tag noch
 
Ich find´s ziemlich übersichtlich. Habe nur dein Programm jedesmal beim auslesen benutzt und nur statt einer eingabe die Zeile festgelegt wo er auslesen soll.
 
Hier habe ich eine überarbeitet version mit tags zu fast jeder zeile so wie ich sie verstanden habe
Problem ist immer noch das ich zwar einlesen kann er mir die ersten beide zeile zwar ausgibt, dann aber bei der 3. erst die zweite und dann die die 1. Zeile.

Code:


#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{


//--------------------------------------------------------------------------------------------
//1. Variablen Deklaration
char a[50];
char b[50];
char c[50];

char temp; // Zum auslesen der Einzelnen Zeilen
int index = 0;
int zaehler = 0;
int auswahl = 0;
char Array[100*100];

//--------------------------------------------------------------------------------------------
//2.Eingeben

cout<<"Bitte geben sie was ein: ";
cin.getline(a,50); //eingebener Wert in a reinschreiben
cout<<endl;
cout<<"Bitte geben sie noch was ein: ";
cin.getline(b,50); //eingebener Wert in b reinschreiben
//--------------------------------------------------------------------------------------------
//3.Einlesen in die Textdatei

ofstream file("Kassette01.txt"); //öffnen der Datei
file<<a<<endl; //einlesen der Variable a
file<<b<<endl; //einlesen der Variable b
file.close(); // Datei wieder schließen


//--------------------------------------------------------------------------------------------
//4.1 Datei auslesen 1. Zeile

ifstream datei01("Kassette01.txt"); // Datei öffnen zum lesen

while((temp = datei01.get()) != EOF) // den inhalt von datei datei01 in tmp schreiben so lange das ende des files nich erreicht ist
{
Array[index++] = temp; // index im array um 1 erhöhen und in tmp schreiben
Array[index] = '\0'; // gucken ob ein zeilen umbruch ist
}
datei01.close(); // Datei wieder schließen

auswahl = 1; // auswahl auf 1 setzen damit 1.zeile gelesen wird
index = 0;
while(zaehler != auswahl-1) //so lange zähler nicht auswahl - 1 ist
{
if(Array[index] == '\n') // wenn array [index] gleich einen zeilenumbruch ist dann
zaehler++; // zähler und index um eins erhöhen
index++;
}
cout<<"1. Zeile: ";
cout<< " ";
while(Array[index] != '\n') // wenn array [index] ungleich einen zeilenumbruch ist dann
{ // array[index++] ausgeben
cout<<Array[index++];
}

cout<<endl;
//--------------------------------------------------------------------------------------------
//4.2 Datei auslesen 2. Zeile

ifstream datei02("Kassette01.txt"); // Datei öffnen zum lesen

while((temp = datei02.get()) != EOF) // den inhalt von datei datei01 in tmp schreiben so lange das ende des files nich erreicht ist
{
Array[index++] = temp; // index im array um 1 erhöhen und in tmp schreiben
Array[index] = '\0'; // gucken ob ein zeilen umbruch ist
}
datei02.close(); // Datei wieder schließen

auswahl = 2; // auswahl auf 1 setzen damit 1.zeile gelesen wird
index = 0;
while(zaehler != auswahl-1) //so lange zähler nicht auswahl - 1 ist
{
if(Array[index] == '\n') // wenn array [index] gleich einen zeilenumbruch ist dann
zaehler++; // zähler und index um eins erhöhen
index++;
}
cout<<"2. Zeile: ";
cout<< " ";
while(Array[index] != '\n') // wenn array [index] ungleich einen zeilenumbruch ist dann
{ // array[index++] ausgeben
cout<<Array[index++];
}

cout<<endl;
system("PAUSE");

//--------------------------------------------------------------------------------------------
//5. Datei anhängen

system("CLS");

ofstream file01("Kassette01.txt", ios_base::app); // zum anhängen öffnen
cout<<"Bitte geben sie noch etwas ein: ";
cin.getline(c,100); //eingebener Wert in c reinschreiben
file01<<c; //anhängen der Variable c
file01.close(); // datei wieder schließen

//--------------------------------------------------------------------------------------------
//6. Datei auslesen angehängte zeile

ifstream datei03("Kassette01.txt"); // Datei öffnen zum lesen

while((temp = datei03.get()) != EOF) // den inhalt von datei datei01 in tmp schreiben so lange das ende des files nich erreicht ist
{
Array[index++] = temp; // index im array um 1 erhöhen und in tmp schreiben
Array[index] = '\0'; // gucken ob ein zeilen umbruch ist
}
datei03.close(); // Datei wieder schließen

auswahl = 3; // auswahl auf 1 setzen damit 1.zeile gelesen wird
index = 0;
while(zaehler != auswahl-1) //so lange zähler nicht auswahl - 1 ist
{
if(Array[index] == '\n') // wenn array [index] gleich einen zeilenumbruch ist dann
zaehler++; // zähler und index um eins erhöhen
index++;
}
cout<<"3. Zeile: ";
cout<< " ";
while(Array[index] != '\n') // wenn array [index] ungleich einen zeilenumbruch ist dann
{ // array[index++] ausgeben
cout<<Array[index++];
}



//--------------------------------------------------------------------------------------------
//7.Ende des Programms

cout<<endl;
system("PAUSE");
return 0;
}



Danke schonmal im voraus
 
Zurück