Zum Inhalt springen

Textdatei (10000 Zeilen) in Array schreiben


schnixx

Empfohlene Beiträge

Schau Dir mal diese einfachen Beispiele an:

Einleitung in die C++ Standard-Library

std::map example

std:map ist kein Hexenwerk und eine einfache Suche haette Dir diese Beispiele geliefert. Nach der Lektuere der o.g. Links solltest Du Klotzkopps rat befolgen und die Map fuellen, statt die Zeilen auszugeben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 60
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Gibt es eventuell noch andere Möglichkeiten in Kombination mit der Syntax?!

Es gibt durchaus andere Möglichkeiten, aber wie schon gesagt std::map ist genau das was Du dafür benötigst, als Anfänger solltest Du Dich evtl darin einmal einarbeiten. Wir haben Dir mit dieser Information schon die passende Datenstruktur für Dich ausgesucht....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

bisher hat alles sehr gut funktioniert.Danke für eure Anregungen.

Nun noch eine Frage:

Wie kann ich die Ausgegebene Datei so bennen, dass der Name der Quelldatei mit eingeschlossen wird. Den Quelldateinamen schreibe ich in einen string.

Bsp.: Quelldatei: test.txt

Ausgabedatei: Auswertung_test.txt

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

ich bin soweit durch mit meinem Tool. Allerdings habe ich das Problem, das der Durchlauf des Tools bis zum Abschluss ca. 8 Minuten dauert.

Das ist eindeutig zu lange für den simplen Zeilenvergleich, auch wenn es pro Datei ca 4000 Zeilen sind.

Gibt es mögliche Verbesserungsvorschläge oder Ideen, um die Laufzeit zu verbessern?!

Auszug aus meinem Quelltext, ab der Stelle, wo das Programm meines erachtens zu lange benötigt:

//------------------------------------

//Vergleich auf Gleichheit der beiden Dateien von Datei 1 zu Datei 2

//Einlesen der das restlichen einmalig vorkommenden Zeilen aus vorheriger Datei

std::ifstream final_out3("complete_out3.txt", ios::in);

//Abfrage auf Ende der Datei sowie einlesen jeder Zeile aus der Datei in newline3

while((!final_out3.eof()) && (getline (final_out3, newline3)))

{

std::ifstream final_out4("complete_out4.txt", ios::in);

//Abfrage auf Ende der Datei sowie einlesen jeder Zeile aus der Datei in newline4

while ((!final_out4.eof()) && (getline(final_out4, newline4)))

{

//Vergleich der beiden eingelesenen Zeilen

if(newline3.compare(newline4) !=0)

//if(newline3!=newline4)

{

//Zähler incrementieren, um zu testen ob Zeile in beiden Dateien vorhanden ist

ungleich++;

//std::cout << " " << line << "\n" ;

//std::cout << " " << line2 << "\n" ;

}

else

{

//Wenn Exitenz nur in einer Datei, incrementiere Zähler "gleich"

gleich++;

}

}

//Abfrage, um Exitenz in beiden Dateien zu prüfen, Ausgabe wenn Pfad in zweiter Datei fehlt

if (gleich==0)

{

//std::cout << File2<<newline3<<" unequal...\n"<< std::endl;

//Ausgabe in Datei

final << File2<<newline3<<" unequal...\n"<< std::endl;

}

//Zähler gleich 0 setzen

ungleich=0;

gleich=0;

}

//--------------------------------

//Vergleich auf Gleichheit der beiden Dateien von Datei 2 zu Datei 1

//Einlesen der das restlichen einmalig vorkommenden Zeilen aus vorheriger Datei

std::ifstream final_out4("complete_out4.txt", ios::in);

//Abfrage auf Ende der Datei sowie einlesen jeder Zeile aus der Datei in newline4

while((!final_out4.eof()) && (getline (final_out4, newline4)))

{

//Einlesen der das restlichen einmalig vorkommenden Zeilen aus vorheriger Datei

std::ifstream final_out3("complete_out3.txt", ios::in);

//Abfrage auf Ende der Datei sowie einlesen jeder Zeile aus der Datei in newline4

while ((!final_out3.eof()) && (getline(final_out3, newline3)))

{

//Vergleich der beiden eingelesenen Zeilen

if(newline3.compare(newline4) !=0)

//if(newline3!=newline4)

{

//Zähler hochzählen, um zu testen ob Zeile in beiden Dateien vorhanden ist

ungleich++;

//std::cout << " " << line << "\n" ;

//std::cout << " " << line2 << "\n" ;

}

else

{

//Wenn Exitenz nur in einer Datei, incrementiere Zähler "gleich"

gleich++;

}

}

//Abfrage, um Exitenz in beiden Dateien zu prüfen, Ausgabe wenn Pfad in erster Datei fehlt

if (gleich==0)

{

std::cout << File1<< newline4<<" unequal...\n"<< std::endl;

//Ausgabe in Datei

final << File1<< newline4<<" unequal...\n"<< std::endl;

}

//Zähler gleich 0 setzen

ungleich=0;

gleich=0;

}

//std::remove("complete_out3.txt");

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

void increment (int &i)

{

i++;

}

while(std::getline(in, line))

{

//Prüfung ob Zeilen den Anforderungen entspricht

if(line.length() > 0 && line[0] == '[')

{

increment(StrMap[line]);

StrMap.insert(pair<map<string,int>());

}

}

Was würde ich den in die Klammern des StrMap.insert einsetzen, damit die Map gefüllt wird?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was würde ich den in die Klammern des StrMap.insert einsetzen, damit die Map gefüllt wird?
Du brauchst insert hier gar nicht.

StrMap[line] sorgt schon dafür, dass ein Eintrag für diesen Schlüssel angelegt und der Wert mit 0 initialisiert wird, falls es noch keinen gibt.

Deine increment-Funktion finde ich übrigens ziemlich merkwürdig, die macht den Code nur länger.

++StrMap[line];

tut's auch.

Link zu diesem Kommentar
Auf anderen Seiten teilen

//Aufruf der Klasse map und Angabe des Namens

std::map<string,int> StrMap;

//Schleife zum Durchlauf der ersten Datei und einlesen jeder Zeile

while(std::getline(in, line))

{

//Prüfung ob Zeilen den Anforderungen entspricht

if(line.length() > 0 && line[0] == '[')

{

++StrMap[line];

//increment(StrMap[line]); //Falls Prüfung zutrifft wird die Zeile

//im ersten Durchlauf in der map angelegt, bei allen weiteren wird der Zähler erhöht

}

}

for (map<string,int>::iterator it =StrMap.begin(); it!=StrMap.end();it++)

if ((*it).second > 1)

cout << (*it).first << " " << (*it).second << endl;

map<string, int>anotherStrMap;

anotherStrMap.insert(StrMap.begin(),StrMap.find((*it).second));

Warum gibt es hier einen Fehler?!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da täuscht der Eindruck allerdings...

Das Programm läuft ja auch bereits, allerdings etwas langsam^^.

Ich habe doch bereits gesagt, dass ich mich mit std::map nicht auskenne und auch nicht verstehe wie es funktioniert, obwohl ich die Dokumentationen hoch und runter gelesen habe.

Ich habe heute den ganzen Tag versucht das Problem zu lösen, allerdings hat dies nicht geklappt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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