Просмотр полной версии : Программисты Delphi? Нужна помощь...
Factor X
22-11-2006, 08:57
Программисты которые пишут на Делфях помогите пожалуйста советом в решении одной задачи?
Вообщем тема такая.. Есть StringGrid..около 10 000 строк в 1 столбце расположены различные значения. Но есть стандарт, и он выглядит так: 5цифр + разделитель \ затем еще 5 цифр (ХХХХХ\ХХХХХ где Х - любое число от 0-9) Вот нужно оставить этот стандарт а все остальное,что не попадает под этот стандарт удалить.
Мой код:
Var I:Integer;
Begin
for i:=0 to StringGrid1.rowcount-1 do
if Length(StringGrid1.Cols[0].Strings[i])=5+StrToInt('\')+5 then //'делет' .....
Он принимает его но при выполнении выдает ошибку типо .... '\' is not valid integer value (типо '\' не являеться числом) :rolleyes:
Буду рад кто откликнеться и поможет советом или кодом. Заранее благодарен...:)
ругается вот на это StrToInt('\'). вообще эта строка не понятна в принципе что ты там пытаешся сделать. читай короче регулярные выражения и будет тебе счастие
Factor X
22-11-2006, 09:08
Я понял что на это ругаеться...А пытаюсь представить длину ячейки в виде состовляющих 5цифр+\+5 цифр:) Как записать '\' в цифровом массиве в виде строки(string)?
сам то понял что сказал?
вообще проверять по длине не правильная идея. учите матчасть короче молчел
Factor X
22-11-2006, 09:21
Мона канеш зделать так пройтись по всей колонке отсечь все символы начиная с 6 и посмареть последний символ являеться ли '\' и если да то вернуть все обратно и пропустить если нет то удалить все полностью но это имхо долгая дорога должно быть проще :)
в общем то еще тебе надо проверить являются ли остальные символы цыфрами)) говорюж читай регулярные выражения а не изобретай велосипед
Factor X
22-11-2006, 09:30
ну вообще-то в этой колонке только цифры единственно их может быть больше 5 или меньше и может быть \ а может и не быть...но проверить все на цифры согласен хороший тон коддинга бует..:)
P.S. Матрикс ты де? давай в асю я знаю ты самый рациональный ход знаешь мне меньше строк кода в +
Factor X
22-11-2006, 17:10
...up:)
госпади, за день можно было уж массу решений придумать
разбивай строку на три 5,1,5 первую и последнюю пробуй конвертить из строки в число, если без ошибкии то это число, и если вторая строка = '/'? то это правильная строка
Factor X
22-11-2006, 17:39
Да я ж не весь день упершись в моник сижу и думаю нат этой задачей:)
Rom@ntic
22-11-2006, 18:09
var i:integer;
slash:string;
begin
for i:=0 to StringGrid1.RowCount-1 do
if Length(StringGrid1.cols[0].Strings[i])>=6 then
begin
slash:= Copy(StringGrid1.cols[0].Strings[i],6,1);
if slash<>'\' then //делет...
end;
end;
end.
тут нету проверки строки на цифры если говоришь что там только цифры:)
сказалиж что нада на цыфры проверять
ManInXRay
22-11-2006, 18:28
2 Factor X
Чтобы сделать программу проверки строки на корректность, надо формально описать сначала, что из себя представляет "корректная строка".
Если напишешь: "#####/#####", так тебе и сделают, и, например, "1234/12345" или "-12345/23456" уже не подойдет.
Rom@ntic
22-11-2006, 21:57
Procedure ClearBadStrings(sStringGrid:TStringGrid);
var i,i2:integer;
s:string;
begin
for i:=sStringGrid.RowCount-1 downto 0 do
begin
s:=sStringGrid.Cols[0].Strings[i];
if Length(s)<>11 then sStringGrid.Cols[0].Strings[i]:='' else
if s[6]<>'\' then sStringGrid.Cols[0].Strings[i]:='' else
try
i2:=StrToInt(copy(s,1,5)); // Проверка на цифры первая половина XXXXX с 1 по 5
i2:=StrToInt(copy(s,7,5)); // Проверка на цифры вторая половина XXXXX с 7 по 11
except
sStringGrid.Cols[0].Strings[i]:=''
end;
end;
end;
P.S. Процедура не удаляет строчки а делает их пустыми (sStringGrid.Cols[0].Strings[i]:=''), те которые не соответствуют стандарту XXXXX\XXXXX Использовал очистку так как удаление строк в стрингриде отдельная процедура не стал ее писать тут :)