Psycho~zicke
Mitglieder-
Gesamte Inhalte
84 -
Benutzer seit
-
Letzter Besuch
Über Psycho~zicke
- Geburtstag 03/02/1983
-
Einzellne Daten aus Tabelle1 auslesen und in Tabelle2 schreiben
Psycho~zicke erstellte Thema in Basic
Guten morgen, ich bin was VBA Programmieren angeht die absolute Anfängerin. Nun hab ich eine Aufgabe bekommen, wo in Tabelle1 Daten stehen und ich den Kundennamen auslesen soll und in Tabelle2 schreiben soll. Leider bin ich grad ein bissel ahnungslos wie das Funkionieren soll. Habe damit angefangen aber komm nicht weiter. Sub Daten_Verschieben() 'Zuordnung der Variablen Dim Zelle As Variant 'Zuordnung der Tabellenblätter Sheets("Tabelle1").Cells(3, 4).Value Sheets("Summe").Cells(2, 1).Value While Sheets("Tabelle1").AktiveCell.Value <> "" While Sheets("Summe").AktiveCell.Value = "" Summe.Cells = Tabelle1.Cells Wend Wend End Sub Wollte mal fragen ob man den Anfang so lassen kann und evt hat ja jemand einen Tip wie ich weiter machen muss. Danke schon mal im Vorraus Liebe Grüße die Zicke -
Super jetzt Funktioniert es wie es soll )) danke
-
Super nun funktioniert es )) Habe aber trotzdem noch mal ne frage und zwar bekomme ich den ersten Datensatz (nach neuer reihenfolge) und den letzten Datensatz (nach alterreihenfolge doppelt ausgegeben. Woran kann das liegen?? Kann es leider nicht feststellen. Danke schon mal im Vorraus. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 15 #define MAXCHAR 50 #define True 1 #define False 0 int Vergleich(const void *s1, const void *s2); void main() { /* Deklaration FILE-Zeiger */ FILE *fQuelle; FILE *fZiel; /* Daclaration der Variablen */ char *sZeile2[MAX]; char sZeile[MAXCHAR]; int iZaehler; int iSortier; int iTausch; int Pos; int i; Pos = 0; iTausch = 0; /* öffnen der Datei */ fQuelle = fopen("C:\\Kernig~1\\Lookup\\1-1-1.c","r"); fZiel = fopen ("C:\\Kernig~1\\Lookup\\test.c", "w+"); /* Überprüfung ob die Datei geöffnet werden kann */ if (fQuelle == NULL) { printf("Fehler beim Oeffnen der Datei C:\\Kernig~1\\Lookup\\1-1-1.c\n"); } for (iZaehler = 0;iZaehler < MAX ; iZaehler++) { /* Einlesen der aktuellen Zeile aus fQuelle */ fgets(sZeile, MAXCHAR, fQuelle); /* entfernen des \n */ sZeile[strlen(sZeile)-1] = 0; /* malloc macht einen Zeiger auf einen freien platz der sZeile +1 länge hat und übergibt den Zeiger an sZeile2[iZaehler] */ sZeile2[iZaehler] = malloc(strlen(sZeile)+1); /* Kopie wird von sZeile an sZeile2[iZaehler] gemacht */ strcpy(sZeile2[iZaehler], sZeile); } for (i = 1; i < MAX; i++) { for(iZaehler = 0; iZaehler < MAX - i; iZaehler++) { if (strcmp(sZeile2[iZaehler+1], sZeile2[iZaehler]) <0) { sZeile2[iTausch] = sZeile2[iZaehler]; sZeile2[iZaehler] = sZeile2[iZaehler+1]; sZeile2[iZaehler+1] = sZeile2[iTausch]; } } } for (iZaehler = 0; iZaehler < MAX; iZaehler++) { /* if abfrage damit nur einma die Tabellen überschriften erscheinen */ if (Pos == 0) { printf("\nName\t Nachname\t Alter\n"); ++Pos; } /* Ausgabe der Datensätze bzw inhalte der Einzelnen Zeiger */ printf("\n%s", sZeile2[iZaehler]); fputs (sZeile2[iZaehler],fZiel); } } int Vergleich(const void *s1, const void *s2) { return (strcmp(*(char **)s1, *(char **)s2)); }
-
Ja genau ich möchte die Inhalte sortieren nicht die Zeigeradressen. So ein mist. Dann schau ich mal wie man das mit strcmp macht. danke
-
Hallo ihr lieben, ich habe folgendes Problem. Ich soll ein programm schreiben das Daten aus einer Tabelle einliest die Tabelle dann ordnet und in eine andere Datei ausgibt. Bis auf das ordnen klappt auch alles wunderbar. Vllt wisst ihr ja wo mein fehler ist. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 15 #define MAXCHAR 50 #define True 1 #define False 0 void main() { /* Deklaration FILE-Zeiger */ FILE *fQuelle; FILE *fZiel; /* Daclaration der Variablen */ char *sZeile2[MAX]; char sZeile[MAXCHAR]; int iZaehler; int iSortier; int iTausch; int Pos; int i; Pos = 0; iTausch = 0; /* öffnen der Datei */ fQuelle = fopen("C:\\Kernig~1\\Lookup\\1-1-1.c","r"); fZiel = fopen ("C:\\Kernig~1\\Lookup\\test.c", "w+"); /* Überprüfung ob die Datei geöffnet werden kann */ if (fQuelle == NULL) { printf("Fehler beim Oeffnen der Datei C:\\Kernig~1\\Lookup\\1-1-1.c\n"); } for (iZaehler = 0;iZaehler < MAX ; iZaehler++) { /* Einlesen der aktuellen Zeile aus fQuelle */ fgets(sZeile, MAXCHAR, fQuelle); /* entfernen des \n */ sZeile[strlen(sZeile)-1] = 0; /* malloc macht einen Zeiger auf einen freien platz der sZeile +1 länge hat und übergibt den Zeiger an sZeile2[iZaehler] */ sZeile2[iZaehler] = malloc(strlen(sZeile)+1); /* Kopie wird von sZeile an sZeile2[iZaehler] gemacht */ strcpy(sZeile2[iZaehler], sZeile); } for (i = 1; i < MAX; i++) { iSortier = 0; for(iZaehler = 0; iZaehler < MAX - i; iZaehler++) { if(sZeile2[iZaehler+1] < sZeile2[iZaehler]) { iTausch = sZeile2[iZaehler]; sZeile2[iZaehler] = sZeile2[iZaehler+1]; sZeile2[iZaehler+1] = iTausch; iSortier = 1; } } if(!iSortier) { break; } } for (iZaehler = 0; iZaehler < MAX; iZaehler++) { /* if abfrage damit nur einma die Tabellen überschriften erscheinen */ if (Pos == 0) { printf("\nName\t Nachname\t Alter\n"); ++Pos; } /* Ausgabe der Datensätze bzw inhalte der Einzelnen Zeiger */ printf("\n%s", sZeile2[iZaehler]); fputs (sZeile2[iZaehler],fZiel); } } Danke schon mal im Vorraus. Liebe Grüße die Zicke
-
Ja genau das ist eine vergleichsfunktion für qsort. ahh ok. Danke nun habe ich es verstanden.
-
Hallo, ich schreibe gerade ein Programm das Aus einer Datei eine Tabelle einliest. Danach soll die Tabelle in Richtiger reihenfolge sortiert werden. Das funktioniert auch alles bestens. Ich habe da eine Funktion die 2 Strings mit einander Vergleicht und genau da liegt mein Problem. int Vergleich(const void *s1, const void *s2) { return (strcmp(*(char **)s1, *(char **)s2)); } Mir wurde gesagt das das nur so funktioniert. Allerdings verstehe ich nicht wieso ich so viele Zeiger brauche. Vllt kann es mir ja jemand erklären. Wäre lieb. Liebe Grüße
-
Ohh ok... Kann mir da jetzt grade im moment nicht vorstellen wie das gehen soll... Werde es mir aber mal durch den Kopf gehen lassen.
-
@ Bubble Danke für die anwort. Ich weiß die Kommentare sind auch nicht grad die besten. Vervollständige sie normalerweise wenn ich das Programm fertig habe und es richtig läuft. Das jetzt sind mehr oder weniger nur anhaltspunkte für mich. Man kann den Inhalt von "sZeile" ohne hilfsarry umdrehen. Oh ok das wusste ich nicht. Bin davon ausgegangen das es nur so geht. Ja genau so hatte ich es eigentlich gedacht, das nach dem Funktionsaufruf in dem aufgerufenen Array die umgekehrte Zeichenkette steht.
-
Bin ja grad dabei es zu lernen und zu verstehen. Ich werd das morgen gleich mal versuchen... Ich danke dir schon mal für deine hilfe...
-
ok dann versuch ich das mal so wie du vorgeschlagen hattest... Bei der Übergabe bleibt es aber gleich oder?
-
war eigentlich der Meinung das ich das & nur bei der übergabe an die Parameter benutzen kann. Arbeite das erste ma mit Zeigern und habe das Prinziep wohl noch nicht wirklich verstanden. Aber ich werde es mal versuchen.
-
Hallo, ich hab da ma nen kleines Problem. Ich hoffe zumindest das es ein kleines ist. Ich soll ein Programm schreiben und aussenliegende Funktionen dafür benutzen. Das hat auch sehr gut geklappt. Leider funktioniert der letzte teil mit den Zeigern nicht so wie es soll... Kann mir vllt jemand weiter helfen?? Es kommt keine Fehlermeldung aber ich bekomme den Hexadezimalen wert nicht umgekehrt. Ich schreib ich mal meinen Quellcode und die aufgaben beschreibung dazu. Vllt weiß ja jemand woran es liegt... Das Fettmakierte ist mein Problemkind... Danke schon ma für die hilfe... *Schreiben Sie ein Programm das nach eingabe des Wertes und der gewünschten Basis die Zahl umrechnet und ausgibt. * *Programm in einzelnen Funktionen schreiben und Zeiger verwenden. **********************************************************/ #include <string.h> #include <ctype.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #define MAXCHAR 30 /* Meldungen an den Kunden und einlesen seiner antworten */ int iMeldung (int iEingabe, int iPos) { if (iPos == 0) { printf ("Bitte geben sie Ihre ganze Zahl ein\n\n"); scanf ("%d",&iEingabe); return iEingabe; } else { printf ("Bitte geben sie die gewünschte Basis an\n\n"); scanf ("%d", &iEingabe); return iEingabe; } } /* Berechnung der GanzenZahl in das gewünschte Zahlensystem mit ergebniss die ganze zahl die bliebt */ int iBerechnungGanzeZahl (int iEingabeZahl, int iBasisZahl) { int iGanzeZahl; iGanzeZahl = 0; iGanzeZahl = iEingabeZahl / iBasisZahl; return iGanzeZahl; } /* Berechnung der Ganzen Zahl in das gewünschte Zahlensystem mit ergebniss der rest der bleibt */ int iBerechnungRest (int iEingabeZahl, int iBasisZahl) { int iRest; iRest = 0; iRest = iEingabeZahl % iBasisZahl; return iRest; } /* Umrechnung von iRest in den Zahlenwert */ int iUmrechnungiRest (int iRest) { int iRestNeu; iRestNeu = 0; if (iRest >= 0 && iRest <= 9 ) { /* iRest % 10 +'0' = iRest wird umgewandelt auf Basis 10 also einem Zahlenwert + 0 Positionen in der Asci Tabelle. Ohne diese umwandlung bekommt man das Zeichen ausgegeben das an der Stelle der Asci Tabelle steht den wir als rest haben und nicht den Zahlenwert den iRest hat. */ iRestNeu = iRest % 10 +'0'; } return iRestNeu; } /* Umwandlung der Hexadezimalzahlen in Buchstaben falls iRest größer wie 9 sein sollte */ void sRestGroesserZehn (char *cBuchstabe, int iBasisZahl, int iRest) { if (iBasisZahl > 10) { switch (iRest) { case (10): { *cBuchstabe = 'A'; } break; case (11): { *cBuchstabe = 'B'; } break; case (12): { *cBuchstabe = 'C'; } break; case (13): { *cBuchstabe = 'D'; } break; case (14): { *cBuchstabe = 'E'; } break; case (15): { *cBuchstabe = 'F'; } break; } } } [B] void Umkehr (char *sZeile, int iEingabeZaehler) { char *sKehrZeile[MAXCHAR]; int iKehrEingabe; iKehrEingabe = 0; /* Übergabe der Zeichenkette sZeile an sKehrZeile. die Zeichenkette sZEile wird von hinten nach vorne an sKehrZeile übergeben so das das letzte Zeichen bei sKehrZeile als erstes Zeichen steht... */ while (iEingabeZaehler > 0) { --iEingabeZaehler; *sKehrZeile[iKehrEingabe] = sZeile[iEingabeZaehler]; ++iKehrEingabe; }[/B] } /* Beginn des Hauptprogramms */ void main () { char sZeile[MAXCHAR]; int iEingabeZaehler; int iEingabe; int iBasis; int iGanzeZahl; int iRest; int iUmrechnungRest; char cBuchstabe; int iPos; cBuchstabe = 'y'; iEingabeZaehler = 0; iUmrechnungRest = 0; iEingabe = 0; iBasis = 0; iGanzeZahl = -1; iRest = 0; iPos = 0; while (iBasis == 0) { /* Meldung an den Kunden welche Zahl er umgerechnet haben möchte und zu welcher Basis. */ iEingabe = iMeldung(iEingabe, iPos); ++iPos; iBasis = iMeldung(iBasis, iPos); if (iBasis > 16 || iBasis == 0) { printf ("Zahlen mit einer Basis höher 16 oder Basis 0 können nicht berechnet werden!!!\n\n"); iBasis = 0; } iPos = 0; } /* Berechnung der Ganzen Zahl in das gewünschte Zahlensystem */ while ( iGanzeZahl != 0) { /* Übergabe der errechneten Ganzenzahl an iGanzeZahl. &iZahl übergibt ihre Adresse an iZahl in der Funktion. Somit haben beide den selben inhalt und adresse. Es ist aber nur eine Kopie der adresse. */ iGanzeZahl = iBerechnungGanzeZahl (iEingabe, iBasis); /* Übergabe des errechneten restes an iRest. */ iRest = iBerechnungRest (iEingabe, iBasis); /* Falls Die Basis 1 ist */ if (iBasis == 1) { iRest = 0; iGanzeZahl = 0; } if (iRest <= 9) { /* Übergabe des errechnetenwertes an iUmrechnungRest */ iUmrechnungRest = iUmrechnungiRest(iRest); sZeile[iEingabeZaehler] = iUmrechnungRest; ++iEingabeZaehler; } /* Übergabe des errechnetenwertes (Heximalzahl größer 10) an iRestGroesserZehn. */ sRestGroesserZehn(&cBuchstabe, iBasis, iRest); if (cBuchstabe != 'y') { sZeile[iEingabeZaehler] = cBuchstabe; ++iEingabeZaehler; } /* Übergabe der Werte und Zähler zurücksetzen */ iEingabe = iGanzeZahl; cBuchstabe = 'y'; iRest = 0; } /* Zusammenführung der Einzelnen werte zu einer Zeichenkette */ sZeile[iEingabeZaehler] = '\0'; [B]Umkehr(&sZeile, iEingabeZaehler);[/B] /* Ausgabe der Umgewandelten Zahl */ printf ("Umgewandelte Zahl: %s\n\n", sZeile); }
-
Guybrush Threepwood: das Porblem ist ja das keiner den ich kenne eine Vista cd hat. Alle hatten es vorinstalliert und dann sind ja keine mehr dabei... Den Key hab ich unten am Notebook stehen hab ich grad gesehen... Chief Wiggum: Ja da kommt keine Fehlermeldung sonst wüsste ich ja was das problem ist. er übernimmt den einfach nicht. Ja habe auch die von samsung probiert aber auch da wird es installiert aber auch nicht übernommen bzw angezeigt.
-
Ich habe das Notebook samsung R40 plus. Der Grafikkartentreiber lässt sich nicht installieren. Ich habe bereits alle Treiber versucht die ich finden konnte. Die maus funktioniert auch nicht richtig. Das Scrollen geht seiten verkehrt, scrollt man nach oben geht das bild nach unten aber auch nur ruckhaft und scrollt man nach unten geht das bild nach oben genauso ruckhaft. Bei der Recovery CD habe ich nur die auswahl die Festplatte zu kopieren oder windows normal zu starten.