Benötige Hilfe beim verarbeiten von Textdateien



  • Hallo,
    Ich habe in einem Ordner ca 100 oder mehr .txt Dateien.
    In jeder .txt Datei steht nur eine Zahl.
    Diese Dateien möchte ich nun geordnet nach der Größe des Wertes aufgelistet bekommen.

    Bsp:

    xyzfsfe.txt 130
    jbniubo.txt 127
    fjvbjid.txt 98
    sdjvnij.txt 77

    Diese Dateien enthalten ergebnisse aus Berechnungen welche ich als .txt gespeichert habe.
    Diese würde ich gerne sortiert anzeigen lassen.

    Bisher kann mein Prog nur einzelne .txt Dateien einlesen,

    bisheriger stand:

    std::ifstream file;
    std::string line;
    file.open("C:\\Users\\Gunny\\Desktop\\Berechnungen\\Mathe\\xyzfd.txt");
    {
    while (std::getline(file, line))
    {
    std::cout << line << std:: endl;
    std:: stringstream zeilenpuffer(line);
    
    double a;
    zeilenpuffer >> a ;
    

    Ich arbeite mit c++ seit diesem Semester und habe keine großen Kenntnisse.
    Eventuell hat jmd einen Quellcode welcher diese Funktion ausführen kann.
    Ich bin für jede Hilfe dankbar 😃 😃



  • Verwendest du irgendein unioxides OS?



  • Ne an meinem Laptop wo ich das Programm schreibe läuft Windows.



  • ca. 100 Dateien mit je nur einem Wert?

    Sind in den Dateinamen oder weiteren Dateidaten noch weitere Infos die du benötigst?

    Wenn möglich, würde ich da nur eine Datei mit den Daten beschreiben.

    Wenn du dir dann noch etwas C++ zu Containern aneignest, sollte dir dann ein recht einfacher Lösungsweg gelingen.

    Lösungen sind viele in C++ denkbar - zeig mal was du an Quelltext selbst zusammen bekommst.



  • Also wenn ich die Werte geordnet in eine datei bekommen würde, wäre völlig ausreichend.
    Ja es ist tatsächlich nur ein Wert;)
    Eine einzelne Datei kann ich auslesen, folgendermaßen ist mein Quelltext:

    std::ifstream file;
    std::string line;
    file.open("C:\\Users\\Gunny\\Desktop\\Berechnungen\\Mathe\\xyzfd.txt");
    {
    while (std::getline(file, line))
    {
    std::cout << line << std:: endl;
    std:: stringstream zeilenpuffer(line);
    
    double a;
    zeilenpuffer >> a ;
    


  • Hallo newcomer007,

    der Code würde auch etwas kürzer gehen, sofern wirklich nur die eine Zahl in der Datei steht.

    std::ifstream file;
    file.open("foo.txt");
    if(file.is_open()) {
      double value = 0.0;
      file >> value;
    } else {
      std::cerr << "Datei konnte nicht geoeffnet werden!" << std::endl;
    }
    

    Zum sortieren würde ich ein STL Container verwenden, der die Schlüssel automatisch sortiert, wie z.B. ein std::set. Sollte noch der Dateiname gegen später eine Rolle spielen würde ich eine std::map nutzen.

    Viele Grüße



  • Danke für die Hilfe:)
    Das Prog welches die einzelnen .txt Dateien schreibt habe ich nun geändert, dass ich eine .txt Datei mit allen Zahlen habe. Diese müsste ich jetzt abfallend ordnen, und speichern.

    Bsp:

    Jan 120
    Peter 90
    Klaus 70

    Kann mir jemand vlt einen code schicken, welcher 1. -.txt Datei öffnet
    - sortiert
    - speichert

    gruß newcommer007



  • Mein bishereiger Quelltext:

    std::ifstream file;
    std::string line;
    file.open("C:\\Users\\Gunny\\Desktop\\datenbank\\Bundesliga\\Mannschaften\\fcbayern.txt");
    
    		if (file.is_open()) {
    			while (std::getline(file, line)) {
    				std::cout << line << std::endl;
    				std::stringstream zeilenpuffer(line);
    				std::string a;
    				std::string tabelle;	
    				double b;
    
    				zeilenpuffer >> a >> b ;
    
    				string fname2 = tabelle;
    				fname2.append(".txt");
    
    				ofstream newdatabase(fname2.c_str());
    				newdatabase << a << ' ' << b << ' ' << endl;]
    

    Ich möchte nicht nur eine Zeile sondern alle Zeilen einlesen und sortieren 🙂



  • newcomer007 schrieb:

    Eventuell hat jmd einen Quellcode welcher diese Funktion ausführen kann.

    for i in $(ls *.txt); do echo -n "$i "; cat $i; done | sort -nr -k2
    

    In C++ dürfte es etwas länger sein.



  • Das mit dem Sortieren der .txt Datei hab ich hinbekommen.
    Leider speichert mir das Prog jeden Spieler in eine einzele .txt Datei.
    Um später zu sortieren benötige ich die Daten in einer .txt Datei.
    Kann mir jmd helfen?

    Bsp:
    30 Hans
    47 Klaus
    89 Peter
    45 Florian

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <sstream>
    #include <vector>
    #include <utility>
    #include <algorithm>
    #include <clocale>
    
    using namespace std;
    
    int main()
    {
    
    	int auswahl;
    
    	std::cin >> auswahl;
    
    	if (auswahl == 2)
    	{
    		std::string Spielername;
    
    		float gelbekarte;
    		float gelbekarte1 = -1;
    
    		int auswahl2;
    
    		a:
    
    		std::cout << "Spielername" << std::endl;
    		std::cin >> Spielername;
    
    		std::cout << "Gelbe karte" << std::endl;
    		std::cin >> gelbekarte;
    
    		pkt = gelbekarte
    
    		string datenbank;
    
    		datenbank.append(".txt");
    
    		ofstream newdatabase(datenbank.c_str());
    		newdatabase << pkt << ' ' << Spielername << ' ' << endl;
    		newdatabase.close();
    
    		std::cout << "Neuer Spieler\t1" << std::endl;
    		std::cout << "Exit\t\t\t2" << std::endl;
    		std::cin >> auswahl2;
    
    		if (auswahl2 == 1)
    			goto a;
    
    		else
    			return 0;
    
    	}