0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 65
1

E2034 Cannot convert 'TStringList' to 'TStringList *'

13.08.2018, 09:55. Показов 3241. Ответов 12
Метки нет (Все метки)

Всем привет! Пытаюсь сделать так чтобы можно было выбрать неограниченное количество файлов, но почему то ругается...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TStringList **Ffile;
// Кажется дело в неверном объявлении. По "->" не могу использовать никаких методов
std::auto_ptr<TStringList>a(new TStringList);
if (OpenDialog1->Execute())
    {
        if (OpenDialog1->Files->Count > 1)
        {
            Memo2->Lines->Add(log0);
            Memo2->Lines->Add("Вы выбрали сл. файлы:");
            for (int i = 0; i < OpenDialog1->Files->Count; i++)
            {
                Ffn = OpenDialog1->Files->Strings[i];
                a->LoadFromFile(Ffn);
                Memo2->Lines->Add(OpenDialog1->Files->Strings[i]);
            }
        }
    }
Т.е. мне нужно выгрузить каждый файл в TStringList a, затем воспользоваться Delimiter и сохранить полученные данные в i-ый столбец двумерного массива TStringList **Ffile. Но я почему-то не могу ничего поделать с TStringList **.

Добавлено через 47 минут
Попробовал сделать так:
C++
1
std::vector<TStringList*>Ffile;
Но не могу понять как это работает. Т.е. надо создавать через Ffile.push_back новый StringList а потом загружать в него файл через LoadFromFile, но еще на этапе создания получаю ошибку:
[bcc32 Error] Unit1.cpp(39): E2034 Cannot convert 'TStringList' to 'TStringList *'

Добавлено через 9 минут
Продолжу свой монолог
Узнал, что можно динамически создавать и StringGrid'ы. Можно примерчик (объявление и инициализация)? StringGrid'ами удобнее было бы
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2018, 09:55
Ответы с готовыми решениями:

Convert TStringList to UnicodeList
Как мне сконвертировать TStringList в UnicodeString ? Вот ощибка: Unit21.cpp(25): E2034 Cannot...

E2034 Cannot convert
вот эта строка CppWebBrowser-&gt;OnBeforeNavigate2 = CppWebBrowser1BeforeNavigate2; вызывает...

E2034 Cannot convert 'wchar_t *' to 'char *'
Здравствуйте ! Опять у меня такая же проблема, помогите пожалуйста, уловить в чём тут &quot;собака...

E2034 Cannot convert 'TColumn *' to 'TTntColumn *'
Помогите пожалуйста void __fastcall TMainForm::DBGrid2DrawColumnCell(TObject *Sender, ...

12
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 65
13.08.2018, 10:37  [ТС] 2
В общем, получилось так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#define FCount 50
    TStringList **Ffile = new TStringList*[FCount];
    for (int j=0; j< FCount; j++)
    Ffile[j] = new TStringList();
 
    OpenDialog1->InitialDir=WideString(PATH) + "CSV";
    if (OpenDialog1->Execute())
    {
        if (OpenDialog1->Files->Count > 1)
        {
            Memo2->Lines->Add(log0);
            Memo2->Lines->Add("Вы выбрали сл. файлы:");
            for (int i = 0; i < OpenDialog1->Files->Count; i++)
            {
                Ffn = OpenDialog1->Files->Strings[i];
                AnsiString b = OpenDialog1->Files->Strings[i];
                b = b.SubString(b.LastDelimiter("\\")+1, b.Length());
                a->LoadFromFile(Ffn);
                Memo2->Lines->Add(b);
                Ffile[i]->LoadFromFile(Ffn);
            }
        }
    }
    for (int k = 0; k < OpenDialog1->Files->Count; k++)
    {
        for (int i = 0; i < Ffile[k]->Count; i++)
        {
            StringGrid3->RowCount++;
            StringGrid3->Cols[i] = Ffile[i];
        }
    }
Теперь вот такая проблема:
E2034 Cannot convert 'TStringList' to 'TStringList *'

Добавляет по принципу пирамиды:
1 строка 1 файла (1С1Ф) 1С2Ф 1С3Ф 1С4Ф 1С5Ф
2С1Ф 2С2Ф 2С3Ф 2С4Ф 2С5Ф
3С2Ф 3С3Ф 3С4Ф 3С5Ф
4С3Ф 4С4Ф 4С5Ф
5С4Ф 5С5Ф
6С5Ф
И вообще без понятия, как это исправить..
0
Модератор
7834 / 5153 / 2149
Регистрация: 21.01.2014
Сообщений: 22,185
Записей в блоге: 3
13.08.2018, 12:21 3
Лучший ответ Сообщение было отмечено Letzins как решение

Решение

Letzins, пример файла прикрепите сюда...
А вообще текст из всех выбранных в диалоге файлов можно загнать в 1 стринглист следующим, например, образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(!OpenDialog1->Execute()) return;
  TStringList *a = new TStringList;
  TStringList *b = new TStringList;
  for(int i = 0; i < OpenDialog1->Files->Count; i++)
   {
     b->LoadFromFile(OpenDialog1->Files->Strings[i]);
     a->AddStrings(b);
   }
  delete b;
//с а делаем то, что надо... Потом удаляем
 delete a;
}
1
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
13.08.2018, 12:31 4
Цитата Сообщение от Letzins Посмотреть сообщение
Но я почему-то не могу ничего поделать с TStringList **.
Какой смысл этой двумерности?
Может просто создать TList, куда закидать TStringList'ы? Ну, или в TStringList добавлять другие TStringList в Objects.
1
Практикантроп
4735 / 2641 / 512
Регистрация: 23.09.2011
Сообщений: 5,672
13.08.2018, 14:40 5
Цитата Сообщение от Letzins Посмотреть сообщение
StringGrid'ами удобнее было бы
Можно создать табличку__
C++
1
   TStringGrid *grid = new TStringGrid(this);
Будет создана невидимая (по моему это предпочтительнее; ну разве что на период отладки назначить ей родителя, чтобы контролировать происходящее) таблица с дефолтовыми характеристиками - 5х5. Только не забыть подключить <Grids.hpp>. И дальше работать с её ячейками как обычно.
1
Avazart
13.08.2018, 15:09
  #6

Не по теме:

Цитата Сообщение от nick42 Посмотреть сообщение
Будет создана невидимая (по моему это предпочтительнее;
Совсем нет. И явно излишне.

0
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 65
13.08.2018, 15:09  [ТС] 7
В общем, вот как сделал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#define FCount 50
TStringList **_File = new TStringList*[FCount];
std::auto_ptr<TStringList>a(new TStringList);
void __fastcall TForm1::Open1Click(TObject *Sender)
{
    if (OpenDialog1->Execute())
    {
        if (OpenDialog1->Files->Count > 1)
        {
            Memo1->Lines->Add(log0);
            Memo1->Lines->Add("Выбраны файлы:");
            for (int i = 0; i < OpenDialog1->Files->Count; i++)
            {
                StringGrid2->ColCount++;
                for (int j=0; j< FCount; j++) _File[j] = new TStringList();
                StringGrid3->Cells[0][i] = OpenDialog1->Files->Strings[i];
                AnsiString b = StringGrid3->Cells[0][i];
                b = b.SubString(b.LastDelimiter("\\")+1, b.Length());
                a->LoadFromFile(StringGrid3->Cells[0][i]);
                Memo1->Lines->Add(b);
                _File[i]->LoadFromFile(StringGrid3->Cells[0][i]);
                StringGrid2->RowCount = _File[i]->Count;
                StringGrid2->Cols[i] = _File[i];
            }   }   }
    StringGrid2->ColCount--;
    StringGrid3->RowCount = OpenDialog1->Files->Count;
    ImportTable();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ImportTable()
{
    std::auto_ptr<TStringList>_file(new TStringList);
    if (OpenDialog1->Files->Strings[0] != "")
    {
 
        CurFile = OpenDialog1->Files->Strings[0];
        _file->LoadFromFile(CurFile);
        for (int i = 0; i < _file->Count; i++)
        {
            StringGrid1->RowCount++;
            StringGrid1->Rows[i]->Delimiter = ',';
            StringGrid1->Rows[i]->DelimitedText = _file->Strings[i];
        }
        StringGrid1->RowCount--;
    }
    if (OpenDialog1->Files->Count > 1)
    {
        for (int u = 1; u <= OpenDialog1->Files->Count; u++)
        {
            CurFile = OpenDialog1->Files->Strings[u];
            _file->LoadFromFile(CurFile);
            int j = StringGrid1->RowCount;
            int p = _file->Count;
            for (int i = 2; i < p; i++)
            {
                StringGrid1->RowCount++;
                StringGrid1->Rows[i+j-2]->Delimiter = ',';
                StringGrid1->Rows[i+j-2]->DelimitedText = _file->Strings[i];
            }   }   }
}
nick42, TheDarkMax2, D1973, Спасибо за наводки!
Теперь вот пытаюсь отсортировать один общий стринггрид (со всем данными из файлов по порядку StringGrid1).
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.08.2018, 15:27 8
Есть много более простых вариантов начиная от массива/TObjectList + TStringList до использования std::vector<>
1
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 65
14.08.2018, 08:56  [ТС] 9
nick42, не подскажете, что я не так делаю?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
TStringGrid **_Grid = new TStringGrid*[FCount];
for (int j=0; j< FCount; j++) _Grid[j] = new TStringGrid(); // Вот здесь начинает жаловаться, что я даун
    for (int j = 0; j < _Grid[0]->RowCount; j++)
    {
        StringGrid5->Rows[j] = _Grid[0]->Rows[j];
    }
    for (int i = 0; i < OpenDialog1->Files->Count; i++)
    {
        _Grid[i]->FixedCols = 0;
        _Grid[i]->FixedRows = 0;
        _Grid[i]->ColCount = 5;
        _Grid[i]->RowCount = 1;
    }
    for (int i = 0; i < OpenDialog1->Files->Count; i++)
    {
        std::auto_ptr<TStringList>CF(new TStringList);
        CF->LoadFromFile(OpenDialog1->Files->Strings[i]);
        for (int j = 0; j < CF->Count; j++)
        {
            _Grid[i]->Rows[j]->Delimiter = ',';
            _Grid[i]->Rows[j]->DelimitedText = CF->Strings[j];
        }
        _Grid[i]->RowCount = CF->Count;
    }
Выдает ошибку:
Код
[bcc32 Error] Unit1.cpp(563): E2285 Could not find a match for 'TStringGrid::TStringGrid()'
TStringList точно так же объявлял и создавал, и он работает
C++
1
2
TStringGrid **_Grid = new TStringGrid*[FCount];
for (int j=0; j< FCount; j++) _Grid[j] = new TStringGrid();
а вот с гридами проблема

Добавлено через 12 минут
Avazart, просто у меня дедлайн, а Grid'ами привычнее, поэтому думаю будет быстрее с помощью них решить задачу.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31849 / 20754 / 8061
Регистрация: 22.10.2011
Сообщений: 35,964
Записей в блоге: 7
14.08.2018, 09:54 10
Лучший ответ Сообщение было отмечено Letzins как решение

Решение

Грид - визуальный компонент, поэтому ему надо указывать владельца и родителя:
C++
1
2
3
4
5
for (int j=0; j< FCount; j++)
{
    _Grid[j] = new TStringGrid(this);
    _Grid[j]->Parent = this;
}
1
Практикантроп
4735 / 2641 / 512
Регистрация: 23.09.2011
Сообщений: 5,672
14.08.2018, 10:53 11
Лучший ответ Сообщение было отмечено Letzins как решение

Решение

C++
1
2
3
4
5
    TStringGrid *grid[8];
    for(int i=0;i<8;i++) grid[i] = new TStringGrid(this);
    grid[2]->Rows[1]->CommaText = "One Two Three Four Five";
    Caption = grid[2]->Cells[3][1]+" "+grid[2]->Cells[1][1];
    //  rezult:  "Four Two"
1
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 65
14.08.2018, 11:11  [ТС] 12
volvo, nick42, Спасибо! Успел сам найти информацию (родителя кстати не указывал, но без проблем работает) Классная все-таки штука этот Grid со всеми своими возможностями.
0
Практикантроп
4735 / 2641 / 512
Регистрация: 23.09.2011
Сообщений: 5,672
14.08.2018, 11:15 13
Цитата Сообщение от Letzins Посмотреть сообщение
Классная все-таки штука этот Grid со всеми своими возможностями.
Классная, но и загадочная... .
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2018, 11:15
Помогаю со студенческими работами здесь

E2034 Cannot convert 'TStrings' to 'UnicodeString'
Добрый день :) Помогите понять что за ошибка TStrings *s; s-&gt;LoadFromFile(&quot;list.txt&quot;); for(int...

Ошибка E2034 Cannot convert 'wchar_t *' to 'char *'
Ошибка при компиляции (bcc32error) смотреть скриншот Установлена последняя версия (С++Builder XE6)

Ошибка: E2034 Cannot convert 'TStrings' to 'AnsiString'
когда программа запускается вылезает ошибка: E2034 Cannot convert 'TStrings' to 'AnsiString' ...

Ошибка E2034: Cannot convert 'TStrings * const' to 'UnicodeString'
я пишу программу отправки на Email когда я пишу строчку IdMessage1-&gt;Body-&gt;Text=Memo1-&gt;Lines;//...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru