String Werte in Array[x] speichern?



  • Hi torsten!

    Dank dir für deine Idee...

    Hört sich nicht schlecht an, hättest du vielleicht ein Code-Beispiel parat?

    Gruß



  • so, mal auf die Schnelle...

    AnsiString wert = "1234;5678;9abc";
    AnsiString Ziel[4][3];
    int x = wert.Length();
    
    for (int i=0; i < x; i++)
    	{
    	//erst auf ; prüfen und dann...
    	// hier jetzt jedes Zeichen an die korrekte Positin des Arrays speichern
    	}
    }
    

    Gruß Torsten



  • Schau Dir mal AnsiString::Pos und AnsiString::SubString an.



  • oder erst in ne TStringList mit Delimiter, StrictDelimiter und DelimitedText und dann ins array

    noch ein Tip: gib eine genauere BCB-Version an, da einige Funktionen erst in neueren Versionen verfügbar sind, z.B. StrictDelimiter



  • alternativ wäre es noch eine Möglichkeit die ";" durch "," oder " " zu ersetzen und per CommaText einzulesen

    greetz KN4CK3R



  • Hi danke euch erstmal für eure Tipps!
    Ich habs jetzt mal so gemacht....
    Leider bekomme ich nix in mein EditFenster(EWinkel_Min4_1).
    Wie gesagt einlesen in ein Memo funkt...
    Liegt das an der Umwandlung? Also Str, Int oder so?
    Hier ein Auszug aus meinem Code:

    #include <vcl.h>
    #pragma hdrstop
    
    #include <iostream>
    #include <conio.h>
    
    #include <sstream>
    #include <string>
    #include <system.hpp>
    
    char In,Out;
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    	 if ((Com5->BytesAvailable())!=0)              //Com2/5
    	 {
    		In = (char)Com5->GetByte();                //Com2/5
    		Memo2->Text = Memo2->Text + AnsiString(In);
    }
    
    void __fastcall TForm1::B_Winkel_Min4Click(TObject *Sender)
    {
    String str= In,str1;
    int index=0, count=4;
    
    str1 =str.SubString(index, count);
    
    EWinkel_Min4_1->Text = str1;
    
    }
    


  • KN4CK3R schrieb:

    alternativ wäre es noch eine Möglichkeit die ";" durch "," oder " " zu ersetzen und per CommaText einzulesen

    greetz KN4CK3R

    Wie mache ich denn das und was hat das fürn Vorteil?



  • String str= In,str1;
    str1 =str.SubString(index, count);
    

    kann so nicht stimmen, denn In ist nur ein char, also nur ein einziges Zeichen und davon versucht du einen SubString zu bilden. Theoretisch sollte zumindest dieser eine Buchstabe dann im Textfeld stehen.

    Für den CommaText müsstest du die ";" durch Kommas ersetzen. Dann könntest du den Text einer Stringliste zuweisen und hättest dein Array.
    Mehr dazu hier (auch wenns nicht C++ ist): http://www.freepascal.org/docs-html/rtl/classes/tstrings.commatext.html

    greetz KN4CK3R



  • mach so:

    AnsiString s = "0234;1023;2001;4567;5466;1234;2555;", MyArray[7];
            int k, z=0;
    
            while(k = s.Pos(";"))
            {
                    MyArray[z] = s.SubString(0 ,k-1);
                    z++;
    
                    k++;
                    s = s.SubString(k, s.Length());
            }
    
            //Hier die Ausgabe des Arrays
            for(int a = 0; a < 7; a++)
            {
                    ShowMessage(MyArray[a]);
            }
    

    so gehts auch:

    AnsiString s = "0234;1023;2001;4567;5466;1234;2555;", *q = &s, MyArray[7];
            int k, z=0;
    
            while(k = q->Pos(";"))
            {
                    MyArray[z] = q->SubString(0 ,k-1);
                    z++;
    
                    k++;
                    *q = q->SubString(k, q->Length());
            }
    
            *q = NULL;
    
            for(int a = 0; a < 7; a++)
            {
                    ShowMessage(MyArray[a]);
            }
    

    pass aber auf das statische array auf, da es ja eine begrenzte grösse von 7 hat.

    ich persönlich würde das array dynamisch anlegen um den code überall einsetzen zu können,
    entweder mit speichererhöhung (realloc) in der schleife oder mit einer funktion die mir vorher
    die anzahl der trennzeichen des strings zurückgibt und dann vor aufruf der schleife den speicher mit dementsprechender grösse belege.



  • oder nen vector benutzen

    greetz KN4CK3R


Anmelden zum Antworten