tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
14
ZUGRIFFE
923
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    marcaurel1984 marcaurel1984 ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Beiträge
    91
    Hallo erst mal,

    Ich brauche ganz dringend nen guten Rat. Habe Borland C++ Builder 6 und will nen prog basteln welches mir helfen soll einen haufen Datein auf einmal umzu bennen.

    Das problem hierbei ist das ich zwei Informationen aus der Datei auslesen muss die dann wiederum als Teil in den neuen Dateinamen einfließen soll.

    zum Bsp. org. Datei. BU_DDUA07.lis11 soll danach 200505_6111.txt heißen.

    "200505" ware das Datum und 6111 wäre ne Inventurnummer zum beispiel.
    Diese Beiden Info´s will ich aus der Datei BU_DDUA07.lis11 auslesen.

    ich habe momentan null peilung HILFE ich habe keine Lust ca. 3000 Datein jeden Monat per Hand umzuschreiben

    Danke im vorraus

    ich nehme jede Hilfe dankend an!
     

  2. #2
    Registriert seit
    Sep 2003
    Ort
    Fürth(Franken)
    Beiträge
    1.060
    Blog-Einträge
    3
    Kannst du überhaupt C++?
    Du solltest mal logisch an dein Problem rangehen...so schwer ist dein Problem nämlich nicht zu lösen...
    Du musst (wahrscheinlich[kann ich nich genau sagen, weil deine Beschreibung etwas mager ist]) den Ordner mit diesen Dateien auslesen und z.B. alle Dateinamen in ein Array packen.
    (Also nur ein Array mit den ganzen Namen).
    Dann halt jede Datei im Array auslesen und je nach Inhalt umbenennen.
    Fertig!

    ( soviel zum logischen Ansatz )

    greetz
    daddz
     
    be inspired...simplify...

  3. #3
    marcaurel1984 marcaurel1984 ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Beiträge
    91
    ersteinmal danke für die Antwort!
    die grundlagen sind vorhanden soviel zu dem das ich C++ mal gelernt habe.

    Folgendes Problem:

    Datei 1 : BU_DDUA07.lis11 Inhalt der datei die ausgelesen werden muss: Datum 20.05.05
    und Inventurnummer 6111

    Datei 2 . BU_DDUA07.lis12 Inhalt der datei die ausgelesen werden muss: Datum 21.05.05
    und Inventurnummer 6357
    und das ganze ca. 3000 mal

    so würd ich an die Sache vom logischen auch rangehen aber bei der Umsetzung fehlt mir der Durchblick sorry
     

  4. #4
    Registriert seit
    Sep 2003
    Ort
    Fürth(Franken)
    Beiträge
    1.060
    Blog-Einträge
    3
    Wie sieht denn so eine Datei "innen" aus?

    greetz
    daddz
     
    be inspired...simplify...

  5. #5
    marcaurel1984 marcaurel1984 ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Beiträge
    91
    eigentlich ne simple Textdatei ohne Format, ne menge Artikelnummern und so ich lade mal ne datei hoch:

    http://marcaurel.ma.ohost.de/testdatei.txt
     

  6. #6
    uhu01 uhu01 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Ort
    AT-STMK
    Beiträge
    207
    Hy!

    Leider blockiert dein Webhoster den Zugriff auf das File, ich bekomme immer eine Fehlermeldung das das externe Linken nicht erlaubt ist.

    mfg
    uhu01
     

  7. #7
    Registriert seit
    Sep 2003
    Ort
    Fürth(Franken)
    Beiträge
    1.060
    Blog-Einträge
    3
    Dann lass mal "/testdatei.txt" einfach weg...dann kommst du auch zu der Datei!

    greetz
    daddz
     
    be inspired...simplify...

  8. #8
    uhu01 uhu01 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Ort
    AT-STMK
    Beiträge
    207
    Hy!

    @daddz:Hatte ich schon versucht, lag aber daran das ich das Referrer Logging einschalten musste.

    @marcaurel1984:Hier mal ne kurze Idee wie ich das machen würde:
    1. Mit findfirstfile der Reihe nach die Dateien in dem Ordner durchgehen, und z.B. in einer std::list speichern
    2. Vier Strings einlesen, das sind die ersten vier Wörter, sie können verworfen werden.
    3. Eine Zahl einlesen diese ist die Artikelnummer und muss gespeichert werden.
    4. Wieder zwei Strings einlesen die verworfen werden.
    5. Abwechselnd eine Zahl einlesen, und den Zeiger in der Datei um eine Stelle weiterschieben. Dies solange machen, bis du das ganze Datum hast.
    6. Mit den Erhaltenen Informationen das File umbenennen

    Sollte das File immer mit "STUDS NACH WARENGRUPPEN SORTIERT " beginnen kannst du den Filepointer natürlich gleich an die richtigen Stellen setzen, ohne die Strings einzeln einzulesen. Sind es am Anfang nicht immer 4 Wörter musst du nach jedem eingelesenen String kontrollieren ob es eine Zahl ist, und diese dann speichern, dann suchst du den folgenden String "Datum" und liest das Datum wie oben beschrieben ein.

    Ich hoffe ich konnte die ein wenig weiterhelfen. Wenn ich noch ein wenig genauer werden soll ein nur sagen.


    mfg
    uhu01
    Geändert von uhu01 (04.06.05 um 15:01 Uhr)
     

  9. #9
    marcaurel1984 marcaurel1984 ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Beiträge
    91
    danke für eure Hilfe.

    @uhu könntest du bitte etwas genauer werden das war doch nen bisschen verwirrend?

    mfg Marc
     

  10. #10
    uhu01 uhu01 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Ort
    AT-STMK
    Beiträge
    207
    Hy!

    Also etwas genauer:

    Zuerst legst du einen neuer Container vom Typ std::vector an, der eine String aufnimmt.
    Code :
    1
    
    std::vector< std::string > vecFileNames
    Dann gehst du mit findfirstfile den Ordner durch und speicherst alle Dateinamen in dem std::vector ab. An dem Link oder in der MSDN findest du alles was du zu findfirstfile brauchst.
    Nun gehst du in einer Schleife alle Einträge der Reihe nach durch, öffnest sie, und ließt die Daten aus.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    fstream fsFile;
    string strDummy;
    char cDummy;
    int iArtikelNum, iDay, iMonth, iYear;
    fsFile.open( "D:\\bsp.txt", ios::in);
     
    fsFile >> strDummy;
    fsFile >> strDummy;
    fsFile >> strDummy;
    fsFile >> strDummy;
    fsFile >> iArtikelNum;
    fsFile >> strDummy;
    fsFile >> strDummy;
    fsFile >> iDay;
    fsFile.read( &cDummy, 1);
    fsFile >> iMonth;
    fsFile.read( &cDummy, 1);
    fsFile >> iYear;
    Nun hast du alle Relevanten Daten gepeichert, und kannst mit movefile problemlos alle Dateien umbenennen.
    Ob das ganze so funktioniert, hängt natürlich davon ab ob die Datei immer so aussieht, u.U. musst du das ganz etwas abändern.

    Sollte z.B. am Anfang immer STUDS... stehen kannst du statt den ersten fsFile << dummy; auch fsFile.sekkg( 39); schreiben.

    Solltest du noch etwas Hilfe brauchen, einfach sagen.

    mfg
    uhu01
    Geändert von uhu01 (04.06.05 um 20:21 Uhr)
     

  11. #11
    marcaurel1984 marcaurel1984 ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Beiträge
    91
    @uhu

    also ich habs mal probiert aber bei mir ****ts es nicht vielleicht scheitert es auch schon beim Container anlegen.

    hast du sonst nen kompletten Quelltext?
     

  12. #12
    uhu01 uhu01 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Ort
    AT-STMK
    Beiträge
    207
    Hy!

    Zeig mal was du schon hast, wir können dir sicher helfen!
    Ich schaus mir morgen sonst mal an.

    mfg
    uhu01
     

  13. #13
    Avatar von jokey2
    jokey2 jokey2 ist offline Mitglied Smaragd
    Registriert seit
    Nov 2004
    Beiträge
    1.235
    Sind das immer nur einzelne Strings, durch Leerzeichen getrennt, oder sind das Datenfelder, die durch TAB's getrennt sind?
     

  14. #14
    marcaurel1984 marcaurel1984 ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Beiträge
    91
    Es ist einfach ne TXT-Datei wo die Strings durch einfache Leerzeichen getrennt sind.

    mfg marc
     

  15. #15
    uhu01 uhu01 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Ort
    AT-STMK
    Beiträge
    207
    Hy!

    Hier mal ne Idee die sicherlich noch verbesserungswürdig ist, aber mit deinem einen File hat sie funktioniert:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    
    #include <windows.h>
    #include <iostream>
    #include <vector>
    #include <string>
    #include <fstream>
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        WIN32_FIND_DATA fdFileData;
        HANDLE hFind;
        vector< string > vecFileNames;
        string strPath( "D:\\");
        
        hFind = FindFirstFile( (strPath + "*.txt").c_str(), &fdFileData);
        if( hFind == INVALID_HANDLE_VALUE) {
            cout << "ERROR: Invalid File Handle [ERROR: " << GetLastError() << "]" << endl;
            return( 0);
        } 
        else  {
            do {
                if( fdFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                    continue;
                vecFileNames.push_back( fdFileData.cFileName);
            }while(FindNextFile(hFind, &fdFileData));
            FindClose(hFind);
            
            fstream fsFile;
            string strDummy;
            char cDummy, szNewFileName[20];
            int iArtikelNum, iDay, iMonth, iYear;
            for( vector< string >::iterator itElement = vecFileNames.begin(); itElement < vecFileNames.end(); itElement++) {
                //string debug_1 = (strPath + (*itElement));
                fsFile.open( (strPath + (*itElement)).c_str(), ios::in);
                fsFile >> strDummy;
                fsFile >> strDummy;
                fsFile >> strDummy;
                fsFile >> strDummy;
                fsFile >> iArtikelNum;
                fsFile >> strDummy;
                fsFile >> strDummy;
                fsFile >> iDay;
                fsFile.read( &cDummy, 1);
                fsFile >> iMonth;
                fsFile.read( &cDummy, 1);
                fsFile >> iYear;
                fsFile.close();
                
                sprintf( szNewFileName, "%s%02d%02d_%d.txt", strPath.c_str(), iYear, iMonth, iArtikelNum);
     
                MoveFileEx( (strPath + (*itElement)).c_str(), szNewFileName, MOVEFILE_REPLACE_EXISTING);
            }
            return (1);
        }
    }

    Achja, der Code ist mir Vorsicht zu verwenden, ich hab ihn ja erst mit einem File probieren können.
    Aber zeig mal deinen Code her, werden den Fehler schon finden!

    mfg
    uhu01
    Geändert von uhu01 (09.06.05 um 08:39 Uhr)
     

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 11.09.10, 12:01
  2. Brauche eure Hilfe...
    Von Meccan im Forum Smalltalk
    Antworten: 4
    Letzter Beitrag: 28.11.05, 13:40
  3. brauche eure Hilfe
    Von trucidare im Forum PHP
    Antworten: 5
    Letzter Beitrag: 01.02.05, 21:32
  4. Brauche eure Hilfe
    Von Magic-Frog im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 22.07.04, 03:23
  5. Brauche mal eure Hilfe !
    Von Manni-das-Mammut im Forum Photoshop
    Antworten: 9
    Letzter Beitrag: 16.10.03, 22:58