|
Тема
|
да отрежа първите 5 симбола или
|
|
Автор | poди (Нерегистриран) |
Публикувано | 19.06.06 17:04 |
|
Търсих нещо ама не го виждам ...
Имам стринг и искам да отрежа първите 4 или 5 символа и използвах
line := BufferListBox.Items[x];
onPos := AnsiPos('D', line);
SetLength(line, onPos-1);
ама може да имам С вместо D ....... дали няма по-лесен начин
или от line да отрежа сума, ама тя може да е 4567,89 ама може и да е 45678,90
Как да си се разхождам по тоз стринг не мога да се начудя
Дайте малко акъл. Благодаря на съветниците предварително!
| |
|
Можеш да пробваш нещо от типа на:
var
idx: Integer;
newLine: String;
FDecimalSeparatorFound: Boolean;
...
line := BufferListBox.Items[x];
newLine := '';
FDecimalSeparatorFound := False;
for i := 1 to Length(line) do
case line[idx] of
'0'..'9': newLine := newLine + line[idx];
DecimalSeparator: begin
if not FDecimalSeparatorFound then
begin
FDecimalSeparatorFound := True;
newLine := newLine + line[idx];
end;
end;
end;
Вместо за DecimalSeparator можеш да си гледаш и за запетая, ако знаеш, че числата ще са винаги с нея, а не с настройката.
ПП
Забравих да уточня, че това ще вземе всички числа от реда. Ако искаш да вземеш само тези в началото на реда сложи един else на case-а и там прекрати цикъла с break.
Редактирано от andrew_nikoloff на 19.06.06 17:29.
| |
Тема
|
Re: да отрежа първите 5 симбола или
[re: poди]
|
|
Автор |
vido (новак) |
Публикувано | 19.06.06 17:32 |
|
s: String;
Разхождаш се с: s
а за рязането:
Copy, Delete, AnsiLeftStr, AnsiRightStr
как се използват: F1
А смисъла на останалато не го разбрах. Какво са C, D, 4567,89 и 45678,90.
Ако са числа: StrToFloat
| |
Тема
|
Re: да отрежа първите 5 симбола или
[re: vido]
|
|
Автор | rodi (Нерегистриран) |
Публикувано | 19.06.06 19:21 |
|
да уточня:
стринга, се състои от:
[име_на_поле_за_край на блок][С][GGMMDD][вид_валута][оборот]
име_на_поле_за_край на блок=5 симбола
имам няколко блока с начало и край образно казано, взимам края на всеки блок и сумирам оборотите и накрая имам
[име_на_поле_за_край на блок][С][GGMMDD][вид_валута][сума]
като завъртам цикъл за да намеря кои редове ми са край на блок, там режа първите 5 символа, а за оборота се чудех как да познавам от къде до къде е та да го съхрана нейде до момента на смятане на суматаааа
мерси за идеите, сега ще проверя кое колко съм разбрала
| |
Тема
|
Re: да отрежа първите 5 симбола или
[re: rodi]
|
|
Автор |
vido (новак) |
Публикувано | 19.06.06 21:57 |
|
Разхождането е s[к] к - индекс (в предходния пост го написах с "i" и се включи италик )
Ако дължината на:
[име_на_поле_за_край на блок][С][GGMMDD][вид_валута]
е фиксирана, сумата ще се вземе лесно.
Ако има разнообразие ще трябва да се търсят маркери с Pos.
В краен случай с регулярни изрази. Аз бих ги използвал (има готови модули), защото ще ми разбият целия ред на отделни полета с 2-3 реда код.
Другото вече го написах
| |
Тема
|
Re: да отрежа първите 5 симбола или
[re: vido]
|
|
Автор | poди (Нерегистриран) |
Публикувано | 19.06.06 22:42 |
|
Хами ДА!
Както режа първите 5 симв. така ще ще стигам и до сумата!!
// na koi red e :62F:
EndBlockListBox.Items.BeginUpdate;
for x:=0 to BufferListBox.Items.Count-1 do
begin
line := BufferListBox.Items[x];
onPos := AnsiPos('D', line);
SetLength(line, onPos-1);
if line = ':62F:' then
EndBlockListBox.Items.Add(IntToStr(x)); //Exit;
end;
EndBlockListBox.Items.EndUpdate;
Мисля да не разфасовам стринга ... за сега .... ще трябва да прочета повече
| |
Тема
|
Хе, хе, не си пи четеш постовете?
[re: poди]
|
|
Автор |
NikB (любопитен) |
Публикувано | 20.06.06 15:00 |
|
Хе, хе, не си пи четеш постовете преди да ги постнеш?
От твоя пост нищо не се рабира.
Може ли да има "Б" вместо "Ц" или "Д"?
| |
Тема
|
така е, съжелявам ...
[re: NikB]
|
|
Автор | rodi (Нерегистриран) |
Публикувано | 21.06.06 12:12 |
|
За съжаление малко съм припряна тези дни и постовете не са четливи
С отрязването на първите 5 символа се справих с
Pole := AnsiLeftStr(line, 5);
така дори не се интересувам Ц ли е Д ли е
А извличанетоо на оборотите за да ги сумирам с АнсиМидСтр
| |
|
|
|
|