Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Dateiinhalt umformen und ausgeben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.01.2007, 23:28 Uhr
dmueller



Hallo liebes Fun-soft Forum .

Ich hab eine gaaanz knifflige Sache, jedenfalls für mich.

Also es liegt folgendes vor, ich beziehe Daten aus einer Datenbankanwendung, diese bekomme ich in Excel übergeben. Diese Zahlen die darin stehen, habe ich normaler weiße als CSV gespeichert und weiterverarbeitet.
Normal kam diese in diesem Format, als Beispiel:

KST ; DBPOS ; HR3 ; M1 ; M2 ; M3 ; M4 ; M5
5001; 2000; 51,74; 600,00; 600,00; 62,862; 25,00; 30,00
5051; 2000; 60,00; 100,00; 400,00; 42,653; 30,00; 30,00

Also eine Art Tabelle, die ich normal weiterverarbeiten kann.

Nun haben die von der Datenbankanwendung den Export verändert und nun bekomm ich die Datei in diesem Format:

Art ; Pos ; 5001 ; 5051 ; 5001; 5051; 5051
PLK ; G0100; 39,00 ; 39,00; 500,00; 40,00; 55,00
PLK ; G0110; 50,00 ; 60,00; 400,00; 80,00; 60,00

Nun schreibt er in die erst Zeile fortlaufend als Überschrift die KST von oben, die DBPOS schreib er wieder als Spalte, und die Werte auch in die Spalten, allerdings gehören die Werte zu den darunter stehenden.
Jetzt müsste ich irgendwie die Form wieder zurück bekommen.
Da hab ich an C++ gedacht, ein kleines Tool dass die eine csv in eine andere csv umwandelt.

Mein bisheriger Code sieht so aus:

C++:
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

int main() {
   // Input
   ifstream input;
   string dateiin = "p.csv";
  
   input.open(dateiin.c_str(), ios_base::in);
   char zeichen;
   if(!input) {
      cout << "Datei konnte nicht geoeffnet werden!" << endl;
      system("PAUSE");
      return -1;
   }
   //input.close();
  
   // -------------- ENDE INPUT
  
   // Output
  
  ofstream output;
  string dateiout = "Import.csv";
  
  output.open(dateiout.c_str(), ios_base::out);
  
  if(!output) {
    // Datei kann nicht geschrieben werden
    cout << "Datei konnte nicht geschrieben werden!" << endl;
    system("PAUSE");
    return -1;
  } else {
          
// Output in eine Datei schreiben
      vector<string> stringliste;
      
      while(input.good()) {
       stringstream sin;
       string line, word;
      
       getline(input, line);
       sin.str(line);
          while(sin.good()) {
              getline(sin, word, ';');
              stringliste.push_back(word);
              output << word << endl;
          }
      }
  
  }
  output.close();
  
  // -------------- ENDE Output
  
  return 0;
}


Nun bekomme ich aber jedes Element, Überschrift oder Wert in eine Zeile. Jeder Wert eine Neue Zeile, das ist leider nicht das was ich wollte .

Ich kenn es von PHP mit einer Foreach schleife die gesamte csv Datei in ein Array zu laden und dabei die einzelnen Werte durch explode am ; zu trennen, leider geht das nicht in c++ und PHP kann ich leider nicht nehmen .

Gibt es dafür eine einfache Lösung oder kann mir irgendjemand einen Tip geben was ich machen kann?

Wäre Super Dankbar! Brauche diese Daten nämlich sehr oft, und jedes mal in Excel die Daten umzustellen würde ich verrückt. Den Export aus der Datenbankanwendung (SAP) kann ich nichts ändern.
Für das weitere verarbeiten wäre es noch ein viel größerer Aufwand zu ändern, da ich ein komplettes Programm umschreiben müssste. Aber wenns nicht anders ginge, muss es wohl so sein .

Vielen Dank für Hilfe im Voraus!!

MfG Daniel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: