Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как заставить TStringlist отобразить данные


Автор: ЛеньПридумыватьНик 7.3.2010, 18:15
Здравствуйте!
Столкнулся с проблемой корректного вывода данных TStringList'ом
Суть проги:
Есть один Edit, два RichEdit'a, кнопка, при нажатии на которую получаем коды символов первого RichEdit'a и заносим их во второй
Вот сам код: 
Код

var c, s: TStringList;
   l: string;  // Сюда мы запишем данные из c.TStringlist;
     o, ci, cj: integer;
     // o будет возвращать код символа, ci, cj - счетчики для
     //первого TStringList'a.
   x: char;
begin
//Инициализируем переменные
 c:=TStringList.Create;
  s:=TStringList.Create;
  //Загружаем в первый TSringlist данные из RichEdit1
c.AddStrings(RichEdit1.Lines);
  //Получаем доступ к строкам TSringlst.
  //Данные заносим в переменную l, над которой будем работать
   for ci:=1 to c.Count - 1 do begin
     l:=c.Strings[ci];
     // Здесь мы получаем код каждого символа каждой строки TStringList
     //Резульат заносим в s.TStringLisr
       for cj:=1 to length(l) do begin
         x:=l[cj];
       o:=ord(x);
      s.Add(IntToStr(o) + ' ');
     RichEdit2.Lines.AddStrings(s);
  end;
 end;

Допустим, в первом RichEdit'e есть строки:
    фыва
    олдж
Необходимо в второй RichEdit вывести:
    244 251 226 224
    238 235 228 230
 
А получается белиберда типа:
    244 
    244 
    251 
    244 
    251 
    226 
    244 
    251 
    226 
    224 
    244 
    251 
    226 
    224 
    238 
    244 
    251 
    226 
    224 
    238 
    235 
    244 
    251 
    226 
    224 
    238 
    235 
    228 
    244 
    251 
    226 
    224 
    238 
    235 
    228 
    230
Как заставить StringList отображать данные корректно? Есть ли альтернатива  s.Add(IntToStr(o) + ' ');?  smile 

Автор: Proxin 7.3.2010, 19:03
Код

procedure recode;
var si,so:stringlist;i,j:integer;s:string;
begin
si:=tstringlist.create;so:=tstringlist.create;
si.addstrings(form1.richedit1.lines);
for i:=0 to si.count-1 do begin
s:='';
for j:=1 to length(si[i]) do s:=s+inttostr(ord(s[i][j]))+' ';
so.add(s);
end;
form1.richedit2.text:='';form1.richedit2.lines.addstrings(so);
freeandnil(si);freeandnil(so);
end;

делал по-быстрому на коленке, но суть, думаю, ясна. а strlist.add добавляет не символ, а строку.

Автор: ЛеньПридумыватьНик 7.3.2010, 20:59
При правке кода что выскакивает ошибка "Array type required" что в Вашем варианте
http://radikal.ru/F/s48.radikal.ru/i121/1003/37/da842221aafb.jpg.html
что в моем:
http://radikal.ru/F/i058.radikal.ru/1003/bf/c7f8b2c8b702.jpg.html
При попытке очистки списков вылетало Access at Violation

Автор: Matematik 8.3.2010, 01:21
ЛеньПридумыватьНик, 

Сначало надо получить строку, а уже из неё брать символы
Код

{...}
z:= si[i];
for j:=1 to length(z) do 
  s:=s+inttostr(ord(z[j]))+' ';
so.add(s);
{...}


Автор: Proxin 8.3.2010, 02:02
у вас на картинке я вообще своего варианта не вижу.

Автор: ЛеньПридумыватьНик 8.3.2010, 10:57
Проблема решена, тема закрыта. Всем спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)