Veröffentlicht 7. Januar 200421 j 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
7. Januar 200421 j 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
7. Januar 200421 j 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
7. Januar 200421 j 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
7. Januar 200421 j 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
7. Januar 200421 j 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
7. Januar 200421 j Original geschrieben von nic_power while(arg=strsep(&*argv,delim)) [/php] was meinst du mit strsep
7. Januar 200421 j 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
7. Januar 200421 j 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)
7. Januar 200421 j 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
7. Januar 200421 j 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.
9. Januar 200421 j 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
9. Januar 200421 j 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 )
21. Januar 200421 j 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
21. Januar 200421 j 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)
26. Januar 200421 j 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
26. Januar 200421 j 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 == ';')
27. Januar 200421 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.