Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2015, 14:08   #1
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию Generics.collections

Доброго времени суток.
Кто то работал в делфи с System.Generics.collections ?
viks1 вне форума Ответить с цитированием
Старый 21.01.2015, 14:23   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

А с чем у вас проблема?
Код:
var
 IntList:TList<Integer>
 StrList:TList<String>
и так далее...
Человек_Борща вне форума Ответить с цитированием
Старый 21.01.2015, 15:01   #3
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
А с чем у вас проблема?
Код:
var
 IntList:TList<Integer>
 StrList:TList<String>
и так далее...
Я создал свой класс:
Код:
type
  TVlans = class(TObject)
    id: string;
    name: string;
  end;
После я хотел с файла отдельно отформатировать файл под :
номер и имя влана.
Код:
var
 V1: TList<TVlans>;
F: TStringList;
  id, name: TVLANS;
  i, j, len: integer;
.....
F := TStringList.Create;
    F.LoadFromFile(OD.FileName);
    for j := 0 to F.Count do
    begin
      id.id := copy(F[j], 1, 5);
      name.name:= copy(F[j], 5, 30);
      len:= Length(F[j])-31;
      Delete(F[j], 31, len);
      if F[j]='' then
      F.Delete(j);
      V1:=TList<TVlans>.Create;
      V1.Add(F[j]);
    end;
проблема вот именно с этой строкой:
Код:
V1.Add(F[j]);
Код HTML:
[dcc32 Error] Unit1.pas(63): E2010 Incompatible types: 'TVlans' and 'string'
а еще почему то с этой:
Код:
Delete(F[j], 31, len);
пишет:
Код HTML:
[dcc32 Error] Unit1.pas(59): E2197 Constant object cannot be passed as var parameter
viks1 вне форума Ответить с цитированием
Старый 21.01.2015, 15:13   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Код:
а еще почему то с этой:
Delete(F[j], 31, len);
Процедура Delete относится к т.н. "магии компилятора". В нее первым параметром можно передать только простую переменную типа string, но никак не свойство типа string.
northener вне форума Ответить с цитированием
Старый 21.01.2015, 15:18   #5
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Код:
а еще почему то с этой:
Delete(F[j], 31, len);
Процедура Delete относится к т.н. "магии компилятора". В нее первым параметром можно передать только простую переменную типа string, но никак не свойство типа string.
Магия случается )
пойду исправлю)
viks1 вне форума Ответить с цитированием
Старый 21.01.2015, 15:20   #6
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Код:
а еще почему то с этой:
Delete(F[j], 31, len);
Процедура Delete относится к т.н. "магии компилятора". В нее первым параметром можно передать только простую переменную типа string, но никак не свойство типа string.
сработало)

но по прежнему мой TList возмущается на несовместимость типов.
Я похоже не понял принцип совместимости что ли моих классов и типов данных.
viks1 вне форума Ответить с цитированием
Старый 21.01.2015, 15:21   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Код:
Delete(F[j], 31, len);
Могу предположить что нужно манипуляцию проводить со строкой, а не с элементом TStringList ибо там нефига не строки. Потому наверно может получиться так:
Код:
var s: String;
s:=F[j];
Delete(s, 31, len);
F[j]:=s;
Цитата:
V1.Add(F[j]);
Мне кажется справедливый кукиш от делфи.
VLans состоит из двух строк, а Вы ему пропихиваете одну. Я бы тоже негодовал.
Постройте дополнительный экземпляр Vlans, допустим х. Тогда:
Код:
x.id:=''; // Ваши данные
x.name:=F[j]; // Это просто пример, а не истина
V1.Add(x);
Писал без делфей, но думаю как-то так.
PS.
Код:
 V1:=TList<TVlans>.Create;
Зачем это в цикле? Это должно быть наверно перед циклом. Ощущение, что Вы ищите истину наугад. Продумайте алгоритм перед его реализацией.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 21.01.2015, 15:24   #8
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Тут только то что создание в цикле и есть правильно, остальное нет
lomastr_ вне форума Ответить с цитированием
Старый 21.01.2015, 15:33   #9
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Код:
begin
    if OD.Execute then
    begin
      F := TStringList.Create;
      F.LoadFromFile(OD.FileName);
      V1 := TList<TVlans>.Create;
      for j := 0 to F.Count do
      begin
        id.id := copy(F[j], 1, 5);
        name.name := copy(F[j], 5, 30);
        len := Length(F[j]) - 31;
        S := F[j];
        Delete(S, 31, len);
        F[j] := S;
        if F[j] = '' then
          F.Delete(j);
        Str.x := F[j];
        V1.Add(Str);
      end;
    end;
Вот что получилось.
Оно запустилось)
Но.. ошибка, как я понял ошибка доступа к памяти
Изображения
Тип файла: png Снимок.PNG (9.0 Кб, 54 просмотров)
viks1 вне форума Ответить с цитированием
Старый 21.01.2015, 15:39   #10
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Код:
for j := 0 to F.Count - 1 do
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java Collections slavarus Помощь студентам 0 06.10.2013 17:57
C#. Generics Arrays/Обобщенные массивы Lasur C# (си шарп) 2 13.03.2012 05:08
== для generics-типов. vedro-compota C# (си шарп) 4 07.04.2011 08:22
System.Collections.IEnumerable; как его подключить? boris-blade Общие вопросы .NET 4 15.03.2010 01:36