string zerlegen und an variablen übergeben - bitte hilfe



  • hi,
    habe ein kleines Programm geschrieben, dass mir eine txt-datei
    zeilenweise ausliest und die enthaltenen datenfelder umsortiert
    und in eine andre datei ausgibt.

    nun hab ich folgendes problem:
    in einer zeile steht folgendes, das ich in der variable
    "artikeltestzeile" stehen habe.
    es sind bestell-dateien, bei dem ich jedem kunden die artikel zuordnen möchte
    und in einer liste aufführen möchte.

    in der txt-datei sieht das so aus:

    Anzahl   Bezeichnung                              Artikelnummer       Einzelpreis        Gesamtpreis        MwSt.
    -----------------------------------------------------------------------------------------------------------------
       3     H-Artikel1 101 x 600       1 Stück                       6,00 EUR      18,00 EUR    2,48 EUR (16%)
    
       3     GEWINDES DIN 975 ST37              504371               3,00 EUR       9,00 EUR    1,24 EUR (16%)
    
    -----------------------------------------------------------------------------------------------------------------
    

    nun frage ich wie folgt ab:

    if (strncmp(buf,"Anzahl   Bezeichnung                              Artikelnummer",60)==0)
    		{  
    
    		lfdLine=lfdLine+2;
    		strcpy(buf,Eingabe.vz[lfdLine].c_str());
    		strcpy (artikeltestzeile,buf);
    }
    

    nun möchte ich irgendwie gesplittet haben, dass ich die
    artikel einem kunden zuordnen kann und vor allem die einzelnen datensätze wie Anzahl Bezeichnung Artikelnummer usw. in Variablen übergeben werden.
    Nun dachte ich mir, ich zerlege die zeile von rechts und übergebe die Werte den Variablen oder ich teile die Zeile irgendwie auf, denn zwischen den Werten sind immer mindestens 3 leerzeichen.

    kann mir da jemand mit einem stück code helfen???
    ausserdem bin ich mir noch nicht ganz im klaren, wie ich mehrere artikel einem kunden zuordnen kann?? also irgendwie artikel(position1) und artikel(position2) gehört zu Kunde(position1+position2).

    hoffe mich einigermassen verständlich ausgedrückt zu haben - bin halt noch ein newbie 😞

    brauche wirklich dringend hilfe - bin ziemlich am verzweifeln 😕´

    noch ein kleiner nachtrag:
    wer mir dabei weiterhelfen kann, dem schicke ich auch gerne den kompletten quellcode per mail zu.



  • schau dir mal strtok an, das wird dir vermutlich helfen



  • wiegesagt - ich bin anfänger und bräuchte eine anwendbare zeile quellcode, damit ich im debugger auch sehen kann, wie das ganze vor sich geht.

    vielleicht hat jemand kurz zeit um ein stück quellcode zu posten.

    gruß und danke schonmal im voraus



  • Hallo,

    benutz mal die Suchfunktion, zu strtok und zu deinem Problem gab es schon etliche Lösungsvorschläge. Da findest du auch etwas Code, mit dem du einsteigen kannst.



  • @carsten:
    soweit war ich schon gestern - was brauchbares hab ich da nicht gefunden.



  • Hm .. ich habe jetzt keine Minute gesucht und gleich etwas brauchbares gefunden:
    http://www.c-plusplus.net/forum/viewtopic.php?t=69015&start=0&postdays=0&postorder=asc&highlight=strtok



  • Hallo,

    hier z. B.:
    http://www.c-plusplus.net/forum/viewtopic.php?t=63194&highlight=strtok

    Dein Problem liegt eher bei den zu trennenden Daten. Ich würde keine Leerzeichen benutzen, sondern eher Tabulatoren oder Semikolons. Es ist zudem immer schwierig, wenn du nicht genau weisst, wie viele Trennzeichen vorhanden sind. Außerdem ist es empfehlenswerter, keine Einheiten (EUR etc.) in die Daten selber zu schreiben, sondern das du trennen. Das sähe dann z. B. so aus:

    Anzahl;Bezeichnung;Artikelnummer;Einzelpreis;Gesamtpreis;MwSt.
    3;H-Artikel1 101 x 600;1;6,00;18,00;2,48;16%
    

    Das ist zwar nicht mehr so schön anzusehen, aber einfacher zu trennen. Wenn die Daten nicht einheitlich aufgebaut sind, ist es sehr kompliziert, die gewünschten Informationen rauszufiltern.



  • das geht nun mal nicht, mit ";" wäre es schon einfach,
    aber die einheitliche Trennung erfolgt nunmal mit
    drei mind. 3 Leerzeichen zwischen den Daten - also " "
    das ist ja eben das problem, wo ich in der luft hänge 😞

    habs grade mal mit dem von dir genannten beispiel versucht,
    und zwar so:

    if (strncmp(buf,"Anzahl   Bezeichnung                              Artikelnummer",60)==0)
    		{  
     		lfdLine=lfdLine+2;
    		strcpy(buf,Eingabe.vz[lfdLine].c_str());
    		strcpy (artikeltestzeile,buf);
    	  	//CutFirstBlanks(artikeltestzeile);
    		char eingabe[300];
    		char summe[50]; 
    		char A[15]="0"; 
    		char B[15]="0"; 
    		char * test; 
    		printf("%s \n\n",artikeltestzeile); 
    		strcpy(eingabe,artikeltestzeile); 
    		test = strtok(eingabe,"  "); 
    		if(test)strcpy(A,test); 
    		test = strtok(NULL,"\n"); 
    		if(test)strcpy(B,test); 
    		printf("das ist a: %s \n das ist b: %s\n",A,B);
    
    		}
    

    Nur leider schneidet er mir die Anzahl vorne weg und beginnt auch bei Variable A erst mitten in der Artikelbeschreibung.



  • @all:
    😕 😕 😕 😕
    kann mir denn wirklich n i e m a n d helfen - oder will mir
    nur niemand helfen?
    😡 😡 😡



  • Hallo,

    also ich kann dein Programm jetzt nicht so ohne Weiteres verstehen. Es wäre hilfreicher, wenn du Kommentare dazu schreiben, Variablen sinnvoller benennen und die Zeilen einrücken würdest. Evtl. wäre ein kompilierbares Programm nicht schlecht, denn ich steig schon bei...

    lfdLine=lfdLine+2;
    

    ...aus. Wofür ist das gut? Möglicherweise kommt noch bessere Hilfe als von meiner Seite, aber ich kann so definitiv nix dazu sagen....



  • @CARSTEN:
    ich schick dir grade eben mal eine mail .
    gruß


Anmelden zum Antworten