Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

Проблема с CommaText   Найти похожие ветки 

 
cvg   (2004-07-08 17:53) [0]

Hi All! Помогите чайнику кто чем сможет!

В одном месте проги у меня строчка

list.CommaText := line;

работает без проблем, в другом -- ругается словами Access Violation. Причем происходит это на стороке

if (FDelimiter <> Value) or not (sdDelimiter in FDefined) then

в процедере

procedure TStrings.SetDelimiter(const Value: Char);

В чем может быть трабл?


 
ssk ©   (2004-07-08 17:55) [1]

по коду похоже, что тебе в конференцию "Компоненты" надо идти


 
Семен Сорокин ©   (2004-07-08 17:58) [2]

ты бы весь код привел? интересуют строки до
list.CommaText := line;


 
cvg   (2004-07-08 18:19) [3]

Там, где ругается, предшествующий код такой:

  try
   line := Clipboard.AsText;
  except
   raise Exception.Create("blah-blah-blah");
  end;
  list.CommaText := line;

а там, где не ругается, такой:

   Readln(FL,line);
   Application.ProcessMessages;
   list.CommaText := line;


 
cvg   (2004-07-09 07:23) [4]

Люди! Pls не молчите! подскажите че-нить! Ибо сильно нужно... :/


 
Alx2 ©   (2004-07-09 08:15) [5]

>cvg   (09.07.04 07:23) [4]
list - что это? Как он создается и что с ним происходит "до того"?


 
cvg   (2004-07-09 08:21) [6]

list описан в вызывающей процедуре как list:TStringList.


 
Думкин ©   (2004-07-09 08:22) [7]


> [6] cvg   (09.07.04 08:21)

А он создан? Как он живет и т.п.


 
Alx2 ©   (2004-07-09 08:24) [8]

Все-таки нужен код. Подробный. Иначе игра в "холодно-горячо" получается какая-то.


 
cvg   (2004-07-09 08:44) [9]

Вот тут выдает ошибку:

procedure Data_from_KKK (Geld,Geld_locked:double;lots,lots_locked:integer);
var i1,i2:integer;
begin
  windows.BringWindowToTop(h_mons);
  PressKeys("Ctrl+C",10);
  try
   line := Clipboard.AsText;
  except
   raise Exception.Create("blah-blah-blah");
  end;
  list.CommaText := line;
// Разбор значений

А вот тут все нормально:

function file_reading:Boolean;
var buf:array [1..2] of double;
begin
 if eof(FL)
 then Result := false
 else
  begin
   buf[1] := ar[4]; ar[4] := ar[1];
   buf[2] := ar[5]; ar[5] := ar[2];
   Readln(FL,line);
   Application.ProcessMessages;
   list.CommaText := line;
// Разбор значений
   Result := true;


 
КаПиБаРа ©   (2004-07-09 08:47) [10]

В первом случае list не создан


 
cvg   (2004-07-09 08:50) [11]

Но он же определен в вызывающей процедуре! И потом, я ведь уже пробовал дописывать в var

var ... list:TStringList; line:string;

-- не помогло Ж:((


 
ЮЮ ©   (2004-07-09 08:51) [12]

да и во втором, похоже, создан случайно


 
КаПиБаРа ©   (2004-07-09 08:51) [13]

У тебя в коде есть строка list := TStringList.Create; ?


 
КаПиБаРа ©   (2004-07-09 08:52) [14]


> ЮЮ ©

Вторым случаем может быть вложенная процедура.


 
Alx2 ©   (2004-07-09 08:52) [15]


procedure Data_from_KKK (Geld,Geld_locked:double;lots,lots_locked:integer);
var i1,i2:integer;
List : TStringList;
begin
 windows.BringWindowToTop(h_mons);
 PressKeys("Ctrl+C",10);
 try
  line := Clipboard.AsText;
 except
  raise Exception.Create("blah-blah-blah");
 end;
 List := TStringList.Create;
try
 list.CommaText := line;
// Разбор....
finally
List.Free;
end;


 
ЮЮ ©   (2004-07-09 08:52) [16]

а строчка list := TStringList.Create  в вызывающей процедуре есть?


 
Anatoly Podgoretsky ©   (2004-07-09 08:54) [17]

Где ни будь возможно и есть, а что?


 
cvg   (2004-07-09 09:02) [18]

Точно, перед вторым вызовом (который без ошиюок проходит) есть такая! Типа, и перед первым должна быть? Ща попробую...


 
ЮЮ ©   (2004-07-09 09:07) [19]

если Data_from_KKK - вложенная в ту самую вызывающую, то наличие, причем до вызова Data_from_KKK, ну просто необходимо.

если же Data_from_KKK - внешняя и вызывается из разных процедур и им этот list ьоже нужен, то надо добавить list в параметры и не забыть создать для вызова.

если же list нужен только в Data_from_KKK, то см. [15]


 
cvg   (2004-07-09 09:21) [20]

ПРОКАТИЛО!!! Всем спасибо! Только еще ма-аланький вопросец:

В принципе CommaText -- это чисто временное решение. Вместо него хотелось бы использовать DelimitedText (потому что в выдираемом тексте есть числа с десятичными запятыми). Теперь, чтобы мне переопределить Delimiter, я в var должен написать Delimiter:Char;, а в теле проседуры -- Delimiter := " ";. Правильно?


 
cvg   (2004-07-09 09:29) [21]

Ой, там вроде так должно быть:

  list := Tstringlist.create;
  list.Delimiter := " ";


 
ЮЮ ©   (2004-07-09 09:45) [22]

К сожалению, IMHO, list.Delimiter := " " доопределяет, а не переопределяет разделители, и десятичная запятая так и останется в числе разделителей. Поэтому надежнее самому парсить текст и выделять "единицы" информации


 
ЮЮ ©   (2004-07-09 09:52) [23]

Хотя, помнится, этот побочный эффект вылазил, если определенного тобой разделителя не было в строке. Т.е. достатосно так:
if Pos(list.Delimiter , s) > 0 then
 list.DelimitedText := s
else
 list.Text := s;


 
КаПиБаРа ©   (2004-07-09 09:56) [24]


> cvg

Там еще где то надо вставить list.Free :)


 
cvg   (2004-07-09 09:56) [25]

Да вроде как я в последнем варианте написал, так работает -- например, list[19] оказался равным "227,10" (без кавычек, конечно). Что, собственно, я и хотел получить. Вот.


 
cvg   (2004-07-09 09:58) [26]

list.Free? Ладно, где-нить воткну... А то память не освободится, что ли?


 
Думкин ©   (2004-07-09 10:18) [27]


> [26] cvg   (09.07.04 09:58)

Ты бы книжку какую почитал, что ли?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.069 c
1-1089265327
Bart
2004-07-08 09:42
2004.07.25
сервис запускает другое приложение


6-1085714482
Graf
2004-05-28 07:21
2004.07.25
Прокси-сервер


1-1089695418
Pavelkq
2004-07-13 09:10
2004.07.25
Диагностика при ошибках.


1-1089507911
Serg_lys
2004-07-11 05:05
2004.07.25
Графика в Delphi


6-1085751039
ГудБой
2004-05-28 17:30
2004.07.25
Как в TTcpCLient указать таймаут.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский