C/C++: textdatei einlesen und teile extrahieren

  • hallo

    ich tüfftle heute an folgendem problem herum: ich habe eine text datei geschrieben, die ich einlesen will

    ******
    Datensatznummer 6786
    ******
    45 56.55
    23 43.555
    ******
    Datensatznummer 9786
    ******
    667 .......

    ich weiss wie ich einzelne zeichen einlesen kann, ich kann alle zahlen extrahieren (zb mit fscanf.. %d oder %s...) aber ich möchte die datensatznummer, dann die dazugehörigen daten gewinnen.
    könnt ihr mir da weiterhelfen.
    danke
    Tempo :thumb:

  • danke für deine antwort

    das problem dabei ist ja, das mein Input immer anders struktieriert ist (45 2.344 oder der kopf mit den sternen und der nummer) ich bis jetzt kann ist, alle datensatz nummern oder alle daten in einer wurst auszulesen. was ich haben möchte ist, dass ich alle daten in ein feld versehen mit der zugehörigen datensatznummer abspeicher. die datensatznummer sind zufällig (nicht 1,2,3)

    lg

    zB.
    *****************************************
    * ID: 33847
    *****************************************
    71 0.540588
    72 2.463489
    73 2.154188
    74 0.004089
    *****************************************
    * ID: 154326
    *****************************************
    194 0.016921
    195 0.351825
    294 0.162982

    mein ziel:
    zb
    Feld[][] mit 194 0.016921 für ID=33847


  • Das kapier ich nicht, wieso sollte 194 0.016921 zur ID 33847 gehören?

  • Zitat

    Das kapier ich nicht, wieso sollte 194 0.016921 zur ID 33847 gehören?

    Tschuldigung, das gehört natürlich nicht dazu.
    Mittlerweile habe ich eine Lösung gefunden:

    int Point;
    int firstLine = -1;
    float tuple[2];
    float data[2];
    char line[1024];

    vtkFloatArray *Stack = vtkFloatArray::New();
    SpinStack->SetNumberOfComponents(2);
    vtkIntArray *pStack = vtkIntArray::New();
    pStack->SetNumberOfComponents(2);
    FILE *file;
    file = fopen(VERZEICHNIS"test.txt", "r");
    if(file == NULL)
    {
    printf("Fehler beim Lesen!\n\n");
    return 1;
    }

    for (int i = 0; fgets(line, 1024, file) != NULL; i++)
    {
    if (sscanf(line, "* ID: %d", &Point) == 1)
    firstLine=i+2;
    if (firstLine != -1 && i - firstLine >= 0)
    {
    if (sscanf(line, "%f %f", &data[0], &data[1]) == 2)
    {
    tuple[0]=data[0];
    tuple[1]=data[1];
    Stack->InsertNextTuple(tuple);
    }
    else
    {
    tuple[0]=Point;
    tuple[1]=Stack->GetNumberOfTuples();
    pStack->InsertNextTuple(tuple);
    }
    }
    }
    fclose(file);

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!