C++ .inf Datei lesen, erkennen und leere Zeilen entfernen

Tobsen84

Grünschnabel
Schönen guten Tag.


Also ich habe da eine ganze Menge .inf Dateien in verschiedenen Ordnern. Den Pfad zu den Ordnern lasse ich vom Nutzer eingeben. Mein Programm läuft dann den Ordner durch und zeigt alle Dateien an, die sich dort aufhalten. Davon brauche ich aber nur die .inf Dateien
In diesen .inf Dateien gibt es an vielen Stellen leere Zeilen die entfernt werden sollen.

Nun habe ich folgende kleine Probleme.

- Dateien wie .txt lassen sich ohne Probleme öffnen. Bei .inf Dateien zeigt er mir gar nichts an. Wie kann ich mein Programm dazu bringen, .inf Dateien zu lesen?

- Wie kann ich vom Programm prüfen lassen, ob die aktuell ausgewählte Datei eine .inf ist?

- Wie bekomme ich es hin diese Leerzeilen zu entfernen? Hatte mir sowas gedacht wie alle '\n\n' durch '\n' zu ersetzen, aber mit wenig Erfolg.

Anbei nun der Code

Code:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

string replace(string inputS, char oldC, string newS){
    string retValS = "";
    int pos = inputS.find(oldC);
    for(int i = 0; i < pos; ++i){
        retValS += inputS[i];
    }
    retValS += newS;
    for(int i = pos +1; i < inputS.length(); ++i){
        retValS += inputS[i];
    }

    return retValS;
}
 
int main()
{
    int i = 0;
    ifstream file("datei.txt");
    std::string buffer;
    
	while (!file.eof()) 
    {
		getline(file, buffer);
        buffer = replace(buffer, '\n', "");
        if(buffer == "\n")
        {
            cout << buffer << endl;
        }
        else
        {
            cout << "NULL" << endl;
        }
     }
	
    getline(file,buffer);
    file.close();
    getchar();
    return 0;
}
 
Also inf datei kannst du genaus so öffen wie txt datein

Die leerenZeilen kannst du prüfen mit isdigt(für Zahlen) und ischar(oder so ähnlich) für Zeichen. Kannst ja Zeilenweise einlesen die Datei und im überschreiben modus öffen. Also liest du die Datei in ein Array rein und dann schreibst du sie neu mit der Prüfung, ob jedes Elementes ob es leer ist.

Viel Erfolg und ich hoffe du bekommst es hin.
 
Werde ich gleich mal ausprobieren.
Hatte auch gedacht, es würde da keine Probleme geben von wegen .inf dateien öffnen, aber der machts einfach nicht.
Kann sowas auch am Compiler liegen? Verwende Dev C++ 4.9.9.2 etwas anderes habe ich hier leider nicht zurverfügung.
 
Mh da überfragst du mich ob es an dem Compiler liegen kann! Ich kann aber mal spaßes halber so eine inf datei bei mir probieren zuladen!

Kannst sie ja hier mal zur verfügung stellen. Aber eigentlich muss das gehen. Weil soweit ich weis c++ alle datenformate öffnen kann!

du kannst es ja mal anders probieren:

Code:
#include <iomanip>
#include <fstream>

//Weis jetzt nicht ob ich bei dem include noch was veregssen habe

std::ifstream inFile("D:\\Report_Performance\\Test\\Reports070801.zip");

if(inFile!=0)//Prüfn ob Datei offen
printf("SUPER");
	
std::string test;
int i=0;
//Zeilenweise einlesen
do{
		std::getline(inFile,test);
		printf("\nAusgabe: %s", test.c_str());
		printf("\nLaenge: %i",test.length());
	i++;
	}while(!inFile.eof());
		

  inFile.close(); //Schließen

Kannst das ja mal ausprobieren und mal bescheid geben!
Viel Spaß
 
Damit kann ich leider immer noch keine .inf Dateien lesen lassen. Dafür aber Leerzeilen umgehen. Die .inf Dateien hatte ich selber erstellt um erstmal zu testen. Einfach eine normale .txt Datei in .inf umgenannt. Dann noch ein wenig mit Text und Leerzeilen versehen und fertig. Habe mal eine mit dran gehangen.
 

Anhänge

Es hat sich nun erledigt und ich habe die Lösung zu meinen Problemen gefunden.
Bei meinen .inf Dateien hatte ich für ein wenig durcheinander gesorgt, da ich an zwei Orten vom Namen her gleiche .inf Dateien hatte, aber eine davon ohne Inhalt war.
Um zu wissen ob die Datei "diedatei.inf" eine .inf Datei ist, splitte ich einfach beim Punkt und habe somit 1."diedatei" und 2."inf". Nun nur noch prüfen ob 2. auch wirklich "inf" ist.

Ich danke dir, Winner, noch mal für den tollen Code zum zeilenweise lesen, der hat mit sehr geholfen.
 
Zurück