Microsoft MVPs inside





 MCSEboard.de MCSE Forum zu Windows XP / 2003 / 2008 Server & Windows Vista / Windows 7
Registrieren Hilfe Regeln Benutzerliste Suchen Heutige Beiträge Alle Foren als gelesen markieren

Off Topic


Die MCSEboard.de Member Lounge: Small Talk Forum — Bitte keine technischen Fragen


Antwort
     
Themen-Optionen
Alt 03.09.2004, 11:00   #1
Member
 
Benutzerbild von Troja2k
 
Offline
Registriert seit: 02-2004
Ort: Ratingen (Düsseldorf)
Beiträge: 263
Programmierung in C

Hallo ihr!

Ich suche jemanden, der ein Ass in der Programmierung mit Ansi C ist und mir weiterhelfen kann.

Da ich seit gestern nicht mehr weiterkomme mit meinen kleinen Tool. Irgendwo ist da ein Fehler versteckt nur wo *grübel*

Kleine Beschreibung worum es geht:

Eine CSV- Datei soll eingelesen werden. Dann in eine andere CSV-Datei geschrieben werden, allerdings nur "wichtige" Werte daraus.

Das klappt soweit, bis auf:
Die Werte die wieder hineingeschrieben sind, kommen nicht in den Spalten an, wo sie eigentlich hin sollen.
Zudem werden sie teilweise hintereinander weg geschrieben....
    Mit Zitat antworten
Alt 03.09.2004, 11:25   #2
Expert Member
 
Benutzerbild von phoenixcp
 
Offline
Registriert seit: 02-2004
Ort: Radebeul
Beiträge: 5.464
Zeilenumbrüche mit \n vergessen?
Tabulatoren mit \t vergessen?

Wäre jetzt mal meine erste Vermutung.

Signatur
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

    Mit Zitat antworten
Alt 03.09.2004, 11:37   #3
Member
 
Benutzerbild von Troja2k
 
Offline
Registriert seit: 02-2004
Ort: Ratingen (Düsseldorf)
Beiträge: 263
ja, hab am ende /n vergessen gehabt. *gegen kopf haut*

nun hab ich nur noch das problem, das er 3 werte zu viel einliest und schreibt, und ich nicht weiß wo er sie hernimmt

Code:
#include <stdio.h>

#include <string.h>

#define INPUTFILE "Air_Plus_Beispiel.csv"
#define OUTPUTFILE "test.csv"
#define DELIM ";"
#define ANZ_SPALTEN 45
#define LINE_LENGTH 1024

int main (void) {
	FILE * input_stream, *output_stream; //Dateizeiger, zeigt auf Informationen über eine geöffnete Datei (nach fopen()) 
	char line[LINE_LENGTH]; //Speicherbereich für eingelesene Zeile 
	//char line [LINE_LENGTH]; //Zeigerarray zum Speichern der Zeiger auf die einzelnen Tokens 
	int i;
	char * temptok; //Hilfszeiger für strtok() 
	char file;
	char tokens[ANZ_SPALTEN][LINE_LENGTH]; 
	char *akt_token; //neuer Zeiger, der auf das aktuelle Token zeigt
	
	
	printf("********** Datei-Auswahl **********\n\n");
    printf("1. Airplus\n");
    printf("2. Vodafone\n");
    printf("3. Beenden\n\n");
    
    printf("Bitte waehlen Sie nun, welche Datei sie verarbeiten wollen.\n\n");
    printf("Ihre Eingabe: ");
    scanf("%i",&file);
    printf("\n\n\n");
    
    
    switch(file)
    {
    case 1:  printf("********** Airplus **********\n");
	

	input_stream  = fopen( INPUTFILE, "r"); // Eingabe oeffnen (lesen)
	if (input_stream == NULL) 
    {
		printf( "\nThe file '%s' was not opened\n", INPUTFILE );//fehlermeldung
		exit(2);
	};

	output_stream =  fopen( OUTPUTFILE, "a"); //Ausgabe oeffnen (anhängen)
	if (output_stream == NULL) 
    {
		printf( "\nThe file '%s' was not opened\n", OUTPUTFILE );//fehlermeldung
		exit(2);
	};

	while (!feof(input_stream)) //Solange kein End-Of-File in der Eingabe...
    { 
		if( fgets (line, LINE_LENGTH, input_stream) ) //liest eine Zeile von einer Datei ein 
                {

		temptok = line;
		for(i = 0; (akt_token = strtok(temptok, DELIM)) != NULL && i < ANZ_SPALTEN; ++i) 
		{ 
           strcpy(tokens[i], akt_token); 
           temptok = NULL; 
        }  
  //strtok erwartet folgende Parameter:
//temptok ist die zu splittende Zeile beim 1. Aufruf und NULL bei nachfolgenden Aufrufen;
//der zweite Parameter sind die Grenzen der Tokens
// Konstante DELIM oben auf ";" definiert
//strtok gibt einen Zeiger auf den nächsten Token zurück oder NULL, wenn kein Token mehr da ist 
//(String zu Ende tokenisiert)

//weise tokens[i] die Adresse des nächstens Tokens zu; wenn die Adresse nicht NULL ist, mache Folgendes: ...
        
		
		//schreiben in datei
		fprintf (output_stream, "%s;",tokens[3]);
		fprintf (output_stream, "%s;",tokens[4]);
		fprintf (output_stream, "%s;",tokens[5]);
		fprintf (output_stream, "%s;",tokens[13]);
		fprintf (output_stream, "%s;",tokens[17]);
		fprintf (output_stream, "%s;",tokens[18]);
		fprintf (output_stream, "%s;",tokens[19]);
		fprintf (output_stream, "%s;",tokens[25]);
		fprintf (output_stream, "%s;",tokens[27]);
		fprintf (output_stream, "%s;",tokens[31]);
		fprintf (output_stream, "%s\n",tokens[38]);
		} //if( fgets(...) )
	}
	//schließen der beiden datein
	fclose (output_stream);
	fclose (input_stream);


	break;
   case 2:  printf("********** Vodafone **********\n");
              break;
   case 3:  printf("********** Programm wird beendet **********\n");
              break;
   default :  printf("********** Falsche Eingabe! **********\n");
              break;
}	
printf("Drücken Sie ENTER");
getchar();
    
}
    Mit Zitat antworten
Alt 03.09.2004, 11:44   #4
Expert Member
 
Benutzerbild von phoenixcp
 
Offline
Registriert seit: 02-2004
Ort: Radebeul
Beiträge: 5.464
Hast du denn einen vernünftigen Debugger zur Hand? Dann müsstest doch sehen woher die kommen.

Aus dem Programm selber kann ich nicht erkennen, was du überhaupt aufnimmst und was du tatsächlich verarbeitest.

Wie sieht denn so eine Zeile aus die du verarbeitest (Beispiel mit Erklärung am Besten )?

Und wie soll die andre Zeile aussehen, die du schreiben willst?

Dann kann ich dir evtl. mehr sagen.

BTW: Warum splittest du das ganze nicht in Basismethoden auf und rufst die nur auf? So machst du ja einiges mehrfach gleich, wenn ich das auf die schnelle richtig verstanden habe.

Signatur
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

    Mit Zitat antworten
Alt 03.09.2004, 11:53   #5
Member
 
Benutzerbild von Troja2k
 
Offline
Registriert seit: 02-2004
Ort: Ratingen (Düsseldorf)
Beiträge: 263
:(

ich mach das ganze einfach mit Dev-C++ von Bloodsheet.
Bin auch ein ziemlicher Newbie mit dem Programmieren und musste mir schon mehrfach helfen lassen.

hierraus werden die daten sortiert (nur 2 zeilen mal kopiert ):
Kartennummer;Karteninhaber-Name;Karteninhaber-Stadt;Rechnungsnummer;Rechnungsdatum;Bruttobetrag;Positionsnummer;Leistungsart;Dokumentennummer;Name;Routing;L eistungserbringer;VerkaufsDatum;ReiseDatum;Klasse;AirlineCode;VerkaufsWaehrung;Netto(VW);MwSt(VW);Brutto(VW);A brechnungsWaehrung;Netto(AW);MwSt(AW);Brutto(AW);Details;Personal-ID;Dienststelle;Kostenstelle;Abrechnungseinheit;Internes Konto;Bearbeitungsdatum;Projektnummer;Auftragsnummer;Aktionsnummer;Reiseziel;Kundenreferenz;Nullrechnungsnumme r;IATA-nummer;MwSt-Satz (%);Geb.-Zeichen;CC_Leistungscode;DOM-Kennzeichen;Fälligkeitstag;Zusatzversicherung
;;;03 06821829;16.08.2004;679,25;;;12 58331332289;;;British Airways;06.08.2004;08.08.2004;;BA;EUR;679,25;0;679,25;EUR;679,25;0;679,25;E;;;0;;;09.08.2004;;05. Aug 04;;;;;23258351;0; ;;;30.08.2004;0

so sieht es bei mir aus, wenn es geschrieben wurde:
Rechnungsnummer;Rechnungsdatum;Bruttobetrag;ReiseDatum;Netto(VW);MwSt(VW);Brutto(VW);Personal-ID;Kostenstelle;Projektnummer;MwSt-Satz (%)
03 06821829;16.08.2004;679,25;08.08.2004;679,25;0;679,25;0;05. Aug 04;30.08.2004;MwSt-Satz (%)
03 06821829;16.08.2004;840,65;10.08.2004;840,65;0;840,65;3010;NO;30.08.2004;MwSt-Satz (%)

so müsste es dann aussehen ungefähr wenn es geschrieben wurde:
Rechnungsnummer;Rechnungsdatum;Bruttobetrag;ReiseDatum;Netto(VW);MwSt(VW);Brutto(VW);Personal-ID;Kostenstelle;Projektnummer;MwSt-Satz (%)
03 06821829;16.08.2004;679,25;08.08.2004;679,25;0;679,25;;0;;0



hoffe du blickst etwas durch

vielen dank schonmal, das du wenigstens es etwas versuchst *g*
    Mit Zitat antworten
Alt 03.09.2004, 11:59   #6
Expert Member
 
Benutzerbild von phoenixcp
 
Offline
Registriert seit: 02-2004
Ort: Radebeul
Beiträge: 5.464
Also wenn ich deine Datensätze richtig verstanden habe, dann werden nicht 3 Spalten zu viel ausgelesen, sondern nur 3 falsche ausgelesen. Du musst mit den , und ; höllisch aufpassen, das verwirrt ungemein beim Lesen.

Überprüfe nochmal alle deine Indizes beim auslesen,das du auch auf die richtigen Felder zugreifst. Du machst nur den Fehler, das du durch die ,'s verwirrt wirst und deshalb auf die falschen Felder greifst.


Gruss Carsten

Signatur
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

    Mit Zitat antworten
Alt 03.09.2004, 14:56   #7
Member
 
Benutzerbild von Troja2k
 
Offline
Registriert seit: 02-2004
Ort: Ratingen (Düsseldorf)
Beiträge: 263
Thx nochmal Carsten,
werde dich Sonntag nochmal belästigen :P

Signatur
Menschen bauen Atomkraftwerke und Waffen!

Keine Maus der Welt würde eine Mausefalle Bauen!!!

    Mit Zitat antworten
Alt 03.09.2004, 15:01   #8
Expert Member
 
Benutzerbild von phoenixcp
 
Offline
Registriert seit: 02-2004
Ort: Radebeul
Beiträge: 5.464
Solange wie du mich nur mit C belästigst gehts ja. *gg*

Signatur
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

    Mit Zitat antworten
Alt 03.09.2004, 15:06   #9
Member
 
Benutzerbild von Troja2k
 
Offline
Registriert seit: 02-2004
Ort: Ratingen (Düsseldorf)
Beiträge: 263
Keine Panik, so schlimm bin ich nicht
Bleibt schön auf C bezogen *g*

*Blatt unter die Nase hält* und???? wo is der fehler??? SUCH!

Signatur
Menschen bauen Atomkraftwerke und Waffen!

Keine Maus der Welt würde eine Mausefalle Bauen!!!

    Mit Zitat antworten
Alt 03.09.2004, 15:14   #10
Expert Member
 
Benutzerbild von phoenixcp
 
Offline
Registriert seit: 02-2004
Ort: Radebeul
Beiträge: 5.464
*Beruhigt sei*

PS: Sind übrigens 2 Blätter wenn man(n) das ausdruckt.

Signatur
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

    Mit Zitat antworten
Antwort


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ADS und VB Programmierung Larzarus Windows Forum — Allgemein 1 29.12.2005 15:53
Literaturempfehlung Programmierung SPS ? Freundlicher Off Topic 2 27.10.2005 09:48
VB 6.0 Programmierung agmblp4eh4e Windows Forum — Allgemein 4 08.12.2004 11:42
asp.net Programmierung blub Testsoftware & Bücher 3 15.06.2004 10:56
VB Programmierung nessus Off Topic 2 09.02.2004 11:16


Alle Zeitangaben in MEZ/CET. Es ist jetzt 00:44 Uhr. Seite generiert in 0,076 Sekunden.

- Unsere Partner -

Copyright © 2000 – 2012 MCSEboard.de

Sprung zum Seitenanfang