Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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):D

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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 :o)

  • 2 Wochen später...
Geschrieben


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

Geschrieben

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 :o) 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)

Geschrieben

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

Geschrieben
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 == ';')

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...