Hallo zusammen,
ich habe hier eine kleine Nuß, die sich von mir einfach nicht knacken lassen will. Ich hoffe, es hat jemand ein wenig Zeit für mich und kann mal kurz über den Code schauen.
Und zwar muss ich ein Programm schreiben, dass in einer (Text-)Datei nach einer bestimmten Anzahl von Zeichen ein ENTER-Zeichen einfügt. Das Programm (siehe unten) funktioniert in soweit auch, nur bekomme ich die Zeichenlänge, nach der das Zeichen eingefügt werden soll einfach nicht variabel
Meine Ausgangsdatei sieht folgendermaßen aus:
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
Meine Zieldatei dann so:
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
Das Programm an sich wird über die Commandozeile aufgerufen und bekommt dort auch die Parameter mit:
c:\konvertieren.exe c:\text.txt c:\text_neu.txt 36
Wie bereits gesagt, ist die Zeichenlänge von 36 noch hart im Programm hinterlegt. Ich habe schon versucht, diese als INT übergeben zu lassen, bekomme dabei aber immer eine riesige Zahl raus. Auch eine CHAR nach INT Konvertierung habe ich versucht, bin aber restlos gescheitert.
Da ich seit vielen Jahren nichts mehr in C++ gemacht habe und sich auch viel geändert hat, habe ich mir das Programm aus vielen kleinen Code-Fragmenten aus dem Netz zusammengeschustert. Nun bin ich auf euer Wissen angewiesen.
Hat jemand von euch eine Idee, wie ich das Ganze lösen könnte?
Vielen Dank schonmal im Voraus
Alex
ich habe hier eine kleine Nuß, die sich von mir einfach nicht knacken lassen will. Ich hoffe, es hat jemand ein wenig Zeit für mich und kann mal kurz über den Code schauen.
Und zwar muss ich ein Programm schreiben, dass in einer (Text-)Datei nach einer bestimmten Anzahl von Zeichen ein ENTER-Zeichen einfügt. Das Programm (siehe unten) funktioniert in soweit auch, nur bekomme ich die Zeichenlänge, nach der das Zeichen eingefügt werden soll einfach nicht variabel
Meine Ausgangsdatei sieht folgendermaßen aus:
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
Meine Zieldatei dann so:
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
Das Programm an sich wird über die Commandozeile aufgerufen und bekommt dort auch die Parameter mit:
c:\konvertieren.exe c:\text.txt c:\text_neu.txt 36
Wie bereits gesagt, ist die Zeichenlänge von 36 noch hart im Programm hinterlegt. Ich habe schon versucht, diese als INT übergeben zu lassen, bekomme dabei aber immer eine riesige Zahl raus. Auch eine CHAR nach INT Konvertierung habe ich versucht, bin aber restlos gescheitert.
Da ich seit vielen Jahren nichts mehr in C++ gemacht habe und sich auch viel geändert hat, habe ich mir das Programm aus vielen kleinen Code-Fragmenten aus dem Netz zusammengeschustert. Nun bin ich auf euer Wissen angewiesen.
Hat jemand von euch eine Idee, wie ich das Ganze lösen könnte?
Code:
// *****************************************************
// * DIESES PROGRAMM FÜGT NACH EINER BESTIMMTEN *
// * ZEICHENLÄNGE EIN ENTER-ZEICHEN IN EINER DATEI EIN *
// *****************************************************
#include <fstream>
#include <iostream>
using namespace std;
void konvertieren(char Dateiname[200],char Tempdateiname[200], int Cut)
{
//Deklaration der Prozedurvariablen
long Durchlauefe = 0,
Zaehler = 0;
// Originaldatei öffnen
ifstream iStream(Dateiname);
// tempomäre Datei erstellen und öffnen
ofstream tempStream(Tempdateiname);
string Datensatz;
// die Zeile in den String laden
getline(iStream, Datensatz);
// Zeichenlänge vom Datensatz und Durchläufe ermitteln
Durchlauefe = (Datensatz.length() / Cut) - 1;
// Zeichen einfügen bis maximale Anzahl von Durchläufen erreicht wurde
while(Zaehler < Durchlauefe)
{
// Zeichen nach bestimmter Zeichenlänge (Cut) einfügen
Datensatz.insert((Zaehler+1) * Cut + Zaehler,"\n");
Zaehler = Zaehler + 1;
}
// Datensatz zurück in tempomäre Datei schreiben
tempStream << Datensatz << endl;
//Dateien schließen
iStream.close();
tempStream.close();
}
int main( int argc, char * argv[], int laenge)
{
system("CLS");
if ( argc > 4 )
{
cout << "\nZu viel Parameter Bitte uebergeben Sie:\n\n";
cout << " - den komplettem Dateipfad zu der Originaldatei\n";
cout << " - den kompletten Zielpfad der Zieldatei und\n";
cout << " - die Zeichenlaenge, nach wievielen Zeichen ein ENTER eingefuegt werden soll!\n\n";
// in argv[0] steht der Pfad der aufgerufenen Datei
cout << "Erster Parameter (Originaldatei): \n" << argv[1] << "\n\n";
cout << "Zweiter Parameter (Zieldatei): \n" << argv[2] << "\n\n";
cout << "Dritter Parameter (Zeichen): \n" << argv[3] << "\n\n";
}
else if ( argc < 2 )
{
cout << "\nZu wenig Parameter Bitte uebergeben Sie:\n\n";
cout << " - den komplettem Dateipfad zu der Originaldatei\n";
cout << " - den kompletten Zielpfad der Zieldatei und\n";
cout << " - die Zeichenlaenge, nach wievielen Zeichen ein ENTER eingefuegt werden soll!\n\n";
}
else
{
// in argv[0] steht der Pfad der aufgerufenen Datei
cout << "Erster Parameter (Originaldatei): \n" << argv[1] << "\n\n";
cout << "Zweiter Parameter (Zieldatei): \n" << argv[2] << "\n\n";
cout << "Dritter Parameter (Zeichen): \n" << argv[3] << "\n\n";
// Datei auf Existenz überprüfen
FILE *fp; // Datei-Zeiger
if ((fp = fopen(argv[1], "r"))==NULL)
{
cout << "\n\nKann Datei \"" << argv[1] <<"\" nicht finden!\n";
cout << "Bitte ueberpruefen Sie Ihre Eingabe! \n\n\n";
system("PAUSE");
exit(1);
}
// tempomäre Datei löschen (wenn vorhanden)
remove(argv[2]);
//Aufruf der Prozedur "konvertieren"
konvertieren(argv[1], argv[2], 36);
}
return 0;
}
Vielen Dank schonmal im Voraus
Alex