TStringList и MSVS 2013
От: semihal  
Дата: 15.10.14 04:51
Оценка:
Собственно из-за тупости некоторых вещей в билдере, вынужден переписать программу в VisualStudii 2013. Но встал вопрос о классе TStringList. Поискав, понял, что чистых аналогов нету. Собственно интересует, как такое из билдера перевести в MSVS 2013.

TStringList list = new TStringList();
//.......
list.AddObject("text", (TObject*)1);
//.......
delete list;

и такое :

TStringList list2 = new TStringList();
//....
list2.Delimiter = ";";
list2.DelimiterText = "12332;133";
//....
Memo1->Lines->Add(list2.Strings[i]);
//....
delete list2;



Думаю смысл вопроса понятен. Писал с телефона, если что извините
Re: TStringList и MSVS 2013
От: Igore Россия  
Дата: 15.10.14 05:56
Оценка:
Здравствуйте, semihal, Вы писали:

S>Собственно из-за тупости некоторых вещей в билдере, вынужден переписать программу в VisualStudii 2013. Но встал вопрос о классе TStringList. Поискав, понял, что чистых аналогов нету. Собственно интересует, как такое из билдера перевести в MSVS 2013.

Что можно использовать, какие есть стороние бибилиотеки?
S>
S>list.AddObject("text", (TObject*)1);
S>

std::vector< std::pair< std::string, int > > vec;// std::list, std::map 
vec.push_back( std::make_pair( "text", 1 ) );


S>и такое :

S>
S>list2.Delimiter = ";";
S>list2.DelimiterText = "12332;133";
S>

std::vector< std::string > tokens;
boost::split( tokens, "12332;133", boost::is_any_of( ";" ) );


S>Думаю смысл вопроса понятен. Писал с телефона, если что извините

Смысл понятен, а вот что ты из Builder-a используешь и что именно тебе нужно переносить не ясно, можешь начать с того что в программе на Builder-e перейдешь на чистый С++ и boost, а графическую часть портируешь потом.
Re[2]: TStringList и MSVS 2013
От: semihal  
Дата: 15.10.14 06:49
Оценка:
О как, спасибо, попробую.
Re: TStringList и MSVS 2013
От: enji  
Дата: 15.10.14 12:09
Оценка:
Здравствуйте, semihal, Вы писали:

S>Собственно из-за тупости некоторых вещей в билдере, вынужден переписать программу в VisualStudii 2013. Но встал вопрос о классе TStringList. Поискав, понял, что чистых аналогов нету. Собственно интересует, как такое из билдера перевести в MSVS 2013.


S>
S>TStringList list = new TStringList();
S>//.......
S>list.AddObject("text", (TObject*)1);
S>//.......
S>delete list;
S>


В дельфях же вроде есть исходники vcl? Выдери оттуда класс TStringList, модифицируй там, где он привязан к vcl и используй в msvc
Re[2]: TStringList и MSVS 2013
От: semihal  
Дата: 15.10.14 17:51
Оценка:
Постарался обернуть это в класс:

ref class vectorByts
{
    private:
        std::vector < std::pair<std::string, int>> *myVector;
    public:
        void cretaeMyVector(int size)
        {
            if (myVector)
                delete myVector;
            myVector = new std::vector < std::pair<std::string, int> > ;
            myVector->resize(size);
            return;
        }
        
        bool addObject(std::string text, int i)
        {
            myVector->push_back(std::make_pair("fsdF", i));
                return true;
        }
        int popMyVector()
        {
            if (!myVector->empty())
                return myVector->begin()->second;
            else return -1;
        }

        vectorByts();
};


в итоге потом делаю:
//createMyvector( ... )
listBox1->Items->Add(test.popMyVector());


В итоге получаю 0, хотя когда делаю addObject то кидаю любое i == true;
+ вопрос, как сделать, что бы вернуть такое значение, что бы можно было его записать в itemBox.
Отредактировано 15.10.2014 17:55 semihal . Предыдущая версия .
Re[3]: TStringList и MSVS 2013
От: enji  
Дата: 15.10.14 21:38
Оценка: +1
Здравствуйте, semihal, Вы писали:

S>Постарался обернуть это в класс:


S>
S>ref class vectorByts
S>{
S>    private:
S>        std::vector < std::pair<std::string, int>> *myVector; // зачем указатель? Просто храни по значению
S>    public:
S>        void cretaeMyVector(int size)
S>        {
S>            if (myVector)
S>                delete myVector;
S>            myVector = new std::vector < std::pair<std::string, int> > ;
S>            myVector->resize(size); // ты создаешь size пустых элементов ("", 0) - ты точно этого хочешь?
S>            return; // зачем тут возврат?
S>        }
        
S>        bool addObject(std::string text, int i)
S>        {
S>            myVector->push_back(std::make_pair("fsdF", i)); // а где text?
S>                return true;
S>        }
S>        int popMyVector() // ну вообще-то pop обычно что-то "выталкивает", а у тебя просто получение элемента...
S>        {
S>            if (!myVector->empty())
S>                return myVector->begin()->second;
S>            else return -1;
S>        }

S>        vectorByts();
S>};
S>


S>в итоге потом делаю:

S>
S>//createMyvector( ... )
S>listBox1->Items->Add(test.popMyVector());
S>


S>В итоге получаю 0, хотя когда делаю addObject то кидаю любое i == true;

подозреваю ты делаешь что-то вроде createMyvector(42), в результате первые элементы вектора — ("", 0)
Re[4]: TStringList и MSVS 2013
От: semihal  
Дата: 16.10.14 07:35
Оценка:
собственно ночью исправил вот на такую вещь?
class vectorByts
{
    private:
        std::vector < std::pair< System::String^, int > > myVector;
    public:
        void addObject(System::String^ text, int i)
        {
            myVector.push_back(std::make_pair(text, 1));
        }
        System::String^ resultMyVector()
        {
            if (!myVector.empty())
                System::String^ result = myVector.back().first;
                return result;
        }

        vectorByts();
};

В общем, что пытаюсь слепить... addObject — создаёт строку в векторе, со значением text и i. А потом мы по индексу будем вытаскивать поле text из вектора, не трогая ID. Но порой придётся и ID трогать, что бы изменить его значение. Поле text нам предстоит засовывать в listBox1->Items->Add(). Поэтому и пытался его сделать типом System::String^

но в ответ получаю такую вещь:
see reference to class template instantiation 'std::pair<System::String ^,int>' being compiled


в чём трабла?((
Отредактировано 16.10.2014 7:38 semihal . Предыдущая версия . Еще …
Отредактировано 16.10.2014 7:37 semihal . Предыдущая версия .
Отредактировано 16.10.2014 7:36 semihal . Предыдущая версия .
Re[5]: TStringList и MSVS 2013
От: Igore Россия  
Дата: 16.10.14 07:58
Оценка: +1
Здравствуйте, semihal, Вы писали:

S>собственно ночью исправил вот на такую вещь?

S>
S>class vectorByts
S>{
S>    public:
S>        void addObject(System::String^ text, int i)
S>        {
S>            myVector.push_back(std::make_pair(text, 1));// Может все таки I а не 1
S>        }
S>        System::String^ resultMyVector()
S>        {
S>            if (!myVector.empty())
S>                System::String^ result = myVector.back().first;
S>                return result;// Здесь result не виден
S>


S>В общем, что пытаюсь слепить... addObject — создаёт строку в векторе, со значением text и i. А потом мы по индексу будем вытаскивать поле text из вектора, не трогая ID. Но порой придётся и ID трогать, что бы изменить его значение. Поле text нам предстоит засовывать в listBox1->Items->Add(). Поэтому и пытался его сделать типом System::String^

Тебе точно этот класс нужен?

S>но в ответ получаю такую вещь:

S>see reference to class template instantiation 'std::pair<System::String ^,int>' being compiled
native и manage не дружат, поэтому либо std::vector< std::pair< std::string, int > >, либо cliext::List<> как это будет выглядеть не знаю.

S>в чём трабла?((

В том что нужно прочитать какую нибудь вводную книгу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.