Главная страница
    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.039 c
14-1088540954
Marser
2004-06-30 00:29
2004.07.25
Винница!!! Земляки, отзовитесь!


6-1085550788
4d696b65
2004-05-26 09:53
2004.07.25
MAC-адрес


14-1088762912
ArMellon
2004-07-02 14:08
2004.07.25
Нужен русификатор 3ds max 5.1 кто знает киньте


4-1086352639
Kair
2004-06-04 16:37
2004.07.25


1-1089785687
hgd
2004-07-14 10:14
2004.07.25
Как управлять программой голосом?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский