txt in sql parsen



  • Hallo,

    ich stehe vor folgendem Problem:

    Ich muss in einer text-file nach einem Schlüsselwort (z.B. Amtsgericht) suchen und den nachfolgenden String kopieren (in diesem Fall z.B. Stadt) in eine SQL Datei schreiben.
    Es müssen auch sie Straße und die Postleitzahl in ein separates Array/String kopiert werden.

    Die Schlüsselwörter sind leider in einem ungegelmäßigem Abstand. (Deshalb suchen).
    (villeicht geht es auch besser, mir ist aber leider nichts eingefallen)

    Das schreiben ist nicht das Problem.
    Aber wie implementiere ich die Suche und kopiere dann den nachfolgenden String in ein Char-Array oder String?

    Ein Block ist wie folgt aufgebaut:

    [...]

    Amtsgericht XYStadt 
    
    ABCstraße 4 
    12345 XYStadt //Alles ab hier muss nicht beachtet/kann verworfen werden
    Fon: 12344(egal) 
    Fax: 12345(egal) 
    
    E-Mail: abc@def.de (egal)
    Web: www.def.de (egal)
    

    [...]

    Ich muss folgende Daten extrahieren: Stadt, PLZ, Straße (mit Hausnummer)

    Gruß
    iradon



  • string ( const string& str, size_t pos, size_t n = npos );
    Content is initialized to a copy of a substring of str. The substring is the portion of str that begins at the character position pos and takes up to n characters (it takes less than n if the end of str is reached before).

    Du könntest in einer Schleife Zeilen mit getline() einlesen, jeweils die ersten 11 Zeichen in einen String speichern, diesen mit "Amtsgericht" vergleichen und bei Gleichheit ab inklusive dieser Position 3 Zeilen mit getline() einlesen und verwerten.



  • Hallo,

    Danke für die Antwort.
    Aber ich steh grad leider irgendwie aufm Schlauch...

    Hier mein aktuelles Programm

    #include <stdio.h>
    
    int main()
    
    {
        FILE *fr = fopen("C:\\BW.txt", "rb");/*Quelldatei*/
        FILE *fw = fopen("C:\\BA.sql", "wb");/*Zieldatei*/
    
        char buffer[1024];
    
        size_t gelesen = fread(buffer, 1, 1024, fr);
    
        while(gelesen)
        {
            fwrite(buffer, 1, gelesen, fw);
            gelesen = fread(buffer, 1, 1024, fr);
        }
    
        fclose(fr);
        fclose(fw);
    }
    

    So weit bin ich jetzt gekommen. Es kann nur eine Datei kopieren.
    Aber ich will in der Datei eben die komplette Zeile ab "Amtsgericht" kopieren und dann als Variable in den SQL code einfügen. Der Code steht im Quellcode selbst (als string oder so).

    So:
    [SQL]BEGIN
    bla
    bla
    [...]'Hier string Stadt einfügen'[...]
    [...]'Hier string Straße einfügen'[...]
    bla
    bla
    END
    GO[/SQL]

    Danke

    Ich hoffe, jemand kann mir helfen



  • Also ich seh´ da nix, was sich auch nur ansatzweise mit dem Problem befasst. Was genau hat "Datei kopieren" mit deiner Aufgabenstellung zu tun? Versuch´ doch bitte wenigstens, das Problem anzugehen, dann kann man dir auch helfen. Aber einfach völlig irrelevanten Code zu posten und darauf zu hoffen, dass ihn jemand anderes für dich vervollständigt geht nicht.
    Thuruk hat dir bereits einen Tipp gegeben, den du vollkommen ignoriert hast. Warum also sollte jemand anderes helfen, wenn du dir nicht helfen lassen willst?



  • Ich glaube hier handelt es sich um ein Missverständnis.
    Da ich noch leider relativ unerfahren bin, was C/++ angeht, frage ich.

    Der unten aufgeführte code ist gewissermaßen essenziell.
    Man braucht ihn /Teile davon, um die datei zu lesen und zu schreiben.

    Oder gehe ich da komplett falsch vor?

    Ich habe mir eben gedacht:

    String in Quelldatei suchen
    Ab da komplette Zeile kopieren
    diese Zeile an einer bestimmten Stelle eimfügen
    Das alles dann an die Zieldatei anfügen, solange, biss der gesuchte string nicht mehr vorhanden ist (EOF).



  • Nach deiner Beschreibung der Aufgabe sollst du doch eine Textdatei nach bestimmten Adressen durchsuchen und diese Adresse (zusammen mit dem Suchbegriff?) in eine Datenbank eintragen. Das hat mit dem Kopieren einer Datei überhaupt nichts zu tun.
    Wenn du das in C++ (deine Quelltext ist C) lösen möchtest könntest du so vorgehen:

    1. Datei öffnen (Stichwort: ifstream )
    2. Die Datei zeilenweise lesen (Stichworte: std::string, getline()
    3. Schlüsselwort in der Zeile suchen (Stichwort: std::string::find()
    4. bei Treffer der Suche die gewünschten Informationen extrahieren und sich merken, am besten in einer Datenstruktur, die die relevanten Informationen enthält
    5. falls ein Treffer existiert die Informationen in die Datenbank eintragen. Dabei stellt sich allerdings noch die Frage, wie du mit der db kommunizierst. Einfach eine Textdatei zu erstellen, deren Daten dann in der db landen, schafft so nur David Copperfield.


  • Hallo,

    ja, die Aufgabenstellung ist, ich soll nur die Adressen in die noch leere SQL-File eintragen. Diese wird dann natürlich separat ausgeführt.

    Es ist egal, ob der zu suchende String mitkopiert wird. Je nachdem, wie es einfacher ist...

    Jetzt bin ich so weit...

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        char     filename[128];
        ifstream file;
        char     zeile[1024];
    
        cout << "Dateiname eingeben: " << flush;
        cin.getline(filename, 127);
    
        file.open(filename, ios::in);
    
        if (file.good())
        {
            file.seekg(0L, ios::beg);
    
            while (! file.eof())
            {
                file.getline(zeile, 1024);
                cout << zeile << endl;
            }
        }
        else
        {
                  cout << "Datei nicht gefunden." << endl;
        }
    
        return 0;
    }
    

    Immerhin kann ich die Datei jetzt schon mal lesen und ausgeben...
    Passt das soweit?
    Die Suche wird mir probleme bereiten, sowie das Kopieren, da ich sowas noch nie gemacht habe. Das Schreiben geht dann.
    Gruß und Danke



  • Statt der char-Arrays solltest du besser std::string benutzen, das zeilenweise Lesen der Datei sähe dann so aus:

    #include <string>
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
       string FileName;
       cout << "Bitte Dateinamen eingeben" << endl;
       cin >> FileName;
    
       string Line;
       ifstream File( FileName.c_str() );
       while( getline( File, Line ) )
       {
          // Zeile gelesen, nun untersuchen
       }
    }
    

    Entschuldigung, bin davon ausgegangen, dass du die Einträge direkt in der Datenbank ablegen solltest.

    Edit:
    Argument für ifstream Konstruktion korrigiert


Anmelden zum Antworten