sir drinkalot Geschrieben 7. Januar 2004 Geschrieben 7. Januar 2004 Das eigentliche übergeben von einzelnen Parameter ist ja kein prob. void __fastcall TForm1::FormActivate(TObject *Sender) { Label1 ->Caption = "Parameter 1 = "+ParamStr(1); Label2 ->Caption = "Parameter 2 = "+ParamStr(2); Label3 ->Caption = "Parameter 3 = "+ParamStr(3); Label4 ->Caption = "Parameter 4 = "+ParamStr(4); Label5 ->Caption = "Parameter 5 = "+ParamStr(5); Label6 ->Caption = "Parameter 6 = "+ParamStr(6); Label7 ->Caption = "Parameter 7 = "+ParamStr(7); Label8 ->Caption = "Parameter 8 = "+ParamStr(8); Label9 ->Caption = "Parameter 9 = "+ParamStr(9); Label10 ->Caption ="Parameter 10 = "+ParamStr(10); } funzt auch iss auch super aber (es kommt noch dicker) Mein chef will das ich das proggie verandere In den beispiel werden die Parameter ja durch leerstellen getrennt. Es soll aber alles was hinter c;/parawin.exe steht eingelesen werden und als EINE zeichenvolge erkannt werden. Und danach soll es nach bestimmten zeichen durchsucht werden bspw. ein ; wenn ich jetzt bspw schreibe. c:/parawin.exe 1;2;3;4;5 6;7;8; soll das programm nicht wir normal Parameter1 = 1;2;3;4;5 Parameter2 = 6;7;8; ausgeben sondern Parameter1 = 1 parameter2 = 2 usw. kann mir dabitte einer (bzw. eine) helfen. Das ist doch erst mein 2 c++ Programm MFG Sir Drinkalot Zitieren
Aquano Geschrieben 7. Januar 2004 Geschrieben 7. Januar 2004 Hi, kann dir das erklären was Du machen musst. Such dir im Netz oder in nem schlauen Buch die Stringfunktionen raus. Habe meine Unterlagen gerade leider nicht griffbereit und programmiere nicht c++ im Alltag. Lese den Parameter in einem String ein. Suche mit der geeigneten Stringfunktion nach den Trennungssymbohlen und übergebe den Rückgabetyp (müsste deine Zahl sein) an ein Array, einzelne Vars oder gebe die sofort aus. Durch die Stringfunktionen musst Du relativ wenig machen bzw. 4-5 Zeilen Code. Gruß Aquano Zitieren
sir drinkalot Geschrieben 7. Januar 2004 Autor Geschrieben 7. Januar 2004 ja schon das hab ich ja schon gesagt. alles als ein parameter enlesen un dann trennen nach zeichen nur wie. wenn man das mal so sieht programmiere ich erst zeit 4 tagen c++ und davon hab ich mal son bissel vb gemacht. also kene ahnung.:confused: kann mir da perhaps jemand mit quelltext helfen. denn wie das funzen soll ist in der logik eindeutig. danke Zitieren
nic_power Geschrieben 7. Januar 2004 Geschrieben 7. Januar 2004 Hallo, Hier als Startpunkt mal ein Stückchen Code für Dich (keinerlei Garantie für volle Funktionalität, da nicht getestet und auch nicht debugged): int main(int argc, char **argv) { char *delim=";"; char *arg; argv++; while (*argv) { while(arg=strsep(&*argv,delim)) printf("Argument = %s\n", arg); argv++; } } [/php] Die Wahl des ";" als Trennzeichen finde ich mehr als unglückliche, da dieses unter Unix von der Shell interpretiert wird (als Trenner zwischen mehreren Shell-Befehlen). D.h. Du musst in diesem Fall die Argumente quoten. Nic Zitieren
need-some-blood Geschrieben 7. Januar 2004 Geschrieben 7. Januar 2004 Wenn jeder Parameter immer nur ein Char groß ist könntest du das ganze in einem Array einlesen und nur jedes ungerade Zeichen nutzen. Nur so als Denksansatz. Die Wahl das Semikolons als Delimiter ist eine wirklich unglückliche Lösung. Aber das wurde ja schon erklärt. Wenn du noch Hilfe zum Quellcode benötigst frag ruhig nach. MVG need-some-blood Zitieren
sir drinkalot Geschrieben 7. Januar 2004 Autor Geschrieben 7. Januar 2004 super danke den quelltext werd ich dann mal ausprobieren und verstehen. die parameter sind ganze namen wie meier müller schulze weber danke ich meld mich dann nochmal Zitieren
sir drinkalot Geschrieben 7. Januar 2004 Autor Geschrieben 7. Januar 2004 Original geschrieben von nic_power while(arg=strsep(&*argv,delim)) [/php] was meinst du mit strsep Zitieren
nic_power Geschrieben 7. Januar 2004 Geschrieben 7. Januar 2004 Hallo, strsep() ist eine Funktion aus der C-Bibliothek (als Ersatz für strtok()). Wäre möglich, dass die Funktion bei Dir fehlt (probiers einfach mal, der Linker wird sich schon beschweren). Nic Zitieren
sir drinkalot Geschrieben 7. Januar 2004 Autor Geschrieben 7. Januar 2004 joa das bringt mich ein stück weiter. allerdings darf ich hoffentlich richtig vermuten das das was du da geschrieben hast alles auf dos basiert. ich habe mir volgendes vorgestellt. int var1 var1 = paramstr(1)+paramstr(2)+..... [/php] und dann mit dem strtok() in der variable nach einem ; oder variablem trennzeichen suchen . (das ganze soll später für cti (ip telefonie) eingesetzt werden. passt das so in etwa oder kann bzw mus sich noch ne menge über c++ lerden (was ich sowieso muss) Zitieren
nic_power Geschrieben 7. Januar 2004 Geschrieben 7. Januar 2004 Hallo, der Code ist plattformunabhängig und sollte sich unter jedem Betriebssystem übersetzen und ausführen lassen. Um die Ziffern zu addieren, kannst Du etwas in der Art: int summe=0; summe+=atoi(arg); verwenden. Falls Du allerdings eine Telefonnumer aus den Argumenten zusammenbauen möchtest, wird das so nicht funktionieren. In dem Fall kannst Du entweder mit sprintf() arbeiten oder mit atoi() und strcat() den String zusammenbauen. Nic Zitieren
sir drinkalot Geschrieben 7. Januar 2004 Autor Geschrieben 7. Januar 2004 also gut geh ich das mal anders an. Wie kann ich in einer zusammenhängenden zeichenvolge (buchstaben ziffern) nach einem ; suchen und ab da dann das vor dem ; in ein labelfel und das danach in ein anderes labelfeld speichern. das ist mein big fat problem. Zitieren
computercrustie Geschrieben 9. Januar 2004 Geschrieben 9. Januar 2004 Im Prinzip brauchst du hier nur durch die einzelnen Zeichen des Strings iterieren. Du speicherst jedes dieser Zeichen in einem anderen String (oder auch Buffer, was ja fast auf's gleiche rauskommt). Sobald das Zeichen ein Trenner ist, legst du den Inhalt deines Buffers ab, leerst den Buffer und iterierst weiter. also str="Dein Text mit Leerzeichen als Trenner."; for (i=0;i<länge str;i++) { if (str[i]==' ') { buffer zu ablage; buffer leeren; } else { buffer+=str[i]; } } if (buffer nicht leer) { buffer zu ablage } Du musst hier nur beachten, das am Ende der Iteration höchstwahrscheinlich noch was im Buffer steht, und zwar immer dann, wenn dein zu parsender Text nicht mit einem Trenner endet. Was aber noch einfacher wäre: nimm Regular Expressions Zitieren
Knuddlbaer Geschrieben 9. Januar 2004 Geschrieben 9. Januar 2004 Für die "Standard" Lösung wäre std::string operator += bestens geeignet. (Irgendwie mögt ihr C++ nich so, hm ?) Ansonsten deutet der erste Post auf ein Borland Fenster Programm hin. Ich denke das der Einstiegspunkt WinMain ist. Such mal in der Hilfe nach Commandline. AnsiString dürfte Dir beim suchen helfen können. Das hat aber nichts mehr mit standard C++ zu tun. http://forum.fachinformatiker.de/forumdisplay.php?s=&forumid=40 Da könnte sich suchen lohnen ) Zitieren
sir drinkalot Geschrieben 21. Januar 2004 Autor Geschrieben 21. Januar 2004 int z = 0; TStringList *sl = new TStringList; sl->Delimiter = ';'; sl->DelimitedText = ParamStr(1)+.....; for ( int i=0 ; i<sl->Count ; i++ ) { Label(z)->Caption= sl ; z++; } delete sl; [/PHP] Das funzt ja soweit aber der sagt mir beim compilieren immer das er keine TStringlist in einen AnsiStrink konvertieren kann. kann mir da jemand helfen. Danke Zitieren
Knuddlbaer Geschrieben 21. Januar 2004 Geschrieben 21. Januar 2004 i[10] kann nicht in i Konvertiert werden oder TStringList kann nicht in AnsiString konvertiert werden. Lass es Dir noch mal durch den Kopf gehen ) Es erscheint mir das TStringList eine Ansammlung mehrerer AnsiString Objekten ist. Welches soll er denn da Deinermeinung nach nehmen wenn Du dem AnsiString den Zeiger auf TStringList gibst ? (Kenne die Details nicht von TStringList aber vllt. hilft die Doku des Compilers weiter) Zitieren
sir drinkalot Geschrieben 26. Januar 2004 Autor Geschrieben 26. Januar 2004 Hab noch ne andere möglichkeit gefunden. int liste[10]; int z = 1 ; int Text= 0 ; AnsiString str = ParamStr(1)+ParamStr(2)+ParamStr(3)+ParamStr(4)+ParamStr(5)+ParamStr(6)+ParamStr(7)+ParamStr(8) ; // hier werden die ganzen Parameter //als ein string deklariert for (int i=0; i<str; i++){ if (str[i] = ";") { //hier wird das ; gesucht liste[z] = Text ; // wenn die anweisung zustimmt leere text in Liste[z] Text = 0 ; z++ ; }else{ Text=Text+str[i] ;// wenn die anweisung nicht zustimmt schreibe den buchstabe in // die Variable Text } } Label1->Caption = liste[1]; Label2->Caption = liste[2]; Label3->Caption = liste[1]; Label4->Caption = liste[2]; Label5->Caption = liste[1]; Label6->Caption = liste[2]; Label7->Caption = liste[1]; Label8->Caption = liste[2]; Label9->Caption = liste[1]; Label10->Caption = liste[2]; } [/php] da gibt er dann aber die meldung [php] [C++ Fehler] Unit1.cpp(26): E2034 Konvertierung von 'char *' nach 'char' nicht möglich [C++ Warnung] Unit1.cpp(26): W8060 Möglicherweise inkorrekte Zuweisung Zitieren
Klotzkopp Geschrieben 26. Januar 2004 Geschrieben 26. Januar 2004 Original geschrieben von sir drinkalot if (str = ";") { Ich nehme an, dass das die beanstandete Zeile ist. Wenn du vergleichen willst, musst du == verwenden. = ist eine Zuweisung. Der Compiler warnt dich hier sogar. Wenn du ein einzelnes Zeichen vergleichen willst, musst du ein Characterliteral angeben. Characterliterale stehen im Gegensatz zu Stringliteralen in einfachen Anführungszeichen: if(str == ';') Zitieren
sir drinkalot Geschrieben 27. Januar 2004 Autor Geschrieben 27. Januar 2004 ja soweit hat alles gefunzt jetzt sagt er noch EVariantTypeCastError umwandlungsfehler von string nach double was kann man da machen nextes prob. der linker sagt: Fatal linker fehler Expekted filename aber erst nachdem ich auf alles speichern geklickt habe ich vermute mal das eine neuinstallation von borland das prob lösen kann. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.