Anfängerproblem Programm funkt nicht, wenn es aus VB(A) aufgerufen wird.



  • Hallo Forum,

    Wenn ich folgendes C++ -Progr. aus dem Explorer heraus aufrufe, wandelt es mir die Datei resi (UNIX-Format) in eine Textdatei resi.txt um.

    Rufe ich aber das Programm aus VB bzw. VBA heraus auf
    shell "unix2ansi.ex",1

    dann öffnet sich das Prog. kurz und wird wieder geschlossen.
    Warum läuft dies nicht normal ab?
    Danke für die Hilfe
    Uwe

    #include <iostream.h>
    #include <fstream.h>
    #include <process.h>
    #include <stdio.h>

    int main()
    {
    ifstream EingDatei;
    ofstream AusgDatei;

    char Dateiname[4];

    strcpy(Dateiname, "resi");

    EingDatei.open(Dateiname, ios::nocreate);
    AusgDatei.open("resi.txt");

    char EinBuchstabe;

    while (EingDatei.get(EinBuchstabe))
    {
    AusgDatei.put(EinBuchstabe);
    }

    EingDatei.close();
    AusgDatei.close();
    return 0;
    }



  • Ich tipp mal darauf das der Pfad des Programmes nicht stimmt und daher die Date die Du im Quellcode fest angibst nicht gefunden werden kann.

    Kannst Du prüfen mit

    if(!EingabeDatei)
    {
      return 20; // Datei konnte nicht geöffnet werden. Eventuell ne ausgabe machen 
    }
    


  • Hallo,
    Einmal rein zur Form: Bitte verwende bbcode-Tags
    Zum Problem:
    Ich würde wetten, dass das Programm trotzdem das tut, was es tun soll, oder?
    Das liegt daran, dass das Programm so schnell arbeitet, und du keine Funktion
    implementiert hat, die das Fenster nach Beendigung der Arbeit "da lässt"
    Programm aus -> Fenster schließt sich

    Ein paar Verbesserungsvorschläge:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstdio> //die neuen namen sind ohne .h, die header der C-Lib sind mit
    //c vorne dran gekennzeichnet (string.h -> cstring)
    #include <process.h> /*kein Standardheader*/
    using namespace std; //dafür sind alle deklarationen und definitionen im Namensbereich
    //std und in darin enthaltenen Namensbereichen zu finden.
    //mit using werden die namen sichtbar gemacht
    
    int main() {
    
    string Dateiname("resi");
    //Wir erledigen die Arbeit im Konstruktor,
    //das geht schneller
    ifstream EingDatei(Dateiname.c_str());
    ofstream AusgDatei((Dateiname+".txt").c_str());
    
    char EinBuchstabe;
    while (EingDatei.get(EinBuchstabe))
    {
    AusgDatei.put(EinBuchstabe);
    }
    //ist gleich mit: AusgDatei << EingDatei.rdbuf();
    
    //Damit sich das Fenster nicht gleich schließt:
    cout << "Drücken Sie Enter, um fortzufahren...";
    //cin.ignore(cin.rdbuf()->in_avail); -> falls der buffer von cin voll ist
    cin.get(); //auf enter warten
    
    //Die "close" lassen wir weg, weil der Destruktor das automatisch tut
    //return 0 lassen wir weg, weil es automatisch eingefügt wird (laut Standard)
    }
    


  • [quote="davie"]Hallo,..
    Ich muß mich wohl erst ein wenig einarbeiten. Dass das Programm nicht tut sehe ich am Ergebnis. Es wird nämlich keine ANSI-Datei erstellt.

    Ich muß sehr häufig Maschinendaten in Access einlesen. Oft sind diese aber im UNIX-Format. Bisher habe ich diese dann im Expl. umgewandelt und dann eingelesen. Jetzt wollte ich dies etwas optimieren und es klappt nicht.

    Trotzdem Danke für die Hilfe.
    Uwe


Anmelden zum Antworten