Текущий архив: 2005.09.25;
Скачать: CL | DM;
Вниз
необходимо удалить текст оставить цифры Найти похожие ветки
← →
max_12345 © (2005-08-14 12:04) [0]Здравствуйте Мастера!
Поскольку я начинающий программист, прошу сильно не пинать.
Стоит такая задачка.
Необходимо в текстовом файле найти строчку, удалить текст и оставить только цифры: В моём примере необходимо оставить только цифру 10500 (без руб.)
Привожу пример:
Текст Текст Текст Текст Текст
Текст Текст Текст Текст Текст
Текст Текст Текст Текст Текст
Всего было произведено изделий за месяц:8шт. на сумму...10500 рублей
Желательно код.
Всем спасибо.
← →
TUser © (2005-08-14 12:15) [1]А чем число 8 отличается от 10500?
← →
max_12345 © (2005-08-14 12:18) [2]я же говорю мне надо оставить только 10500, а чем отличается
Вы и сами знаете.
← →
Zeqfreed © (2005-08-14 12:43) [3]max_12345 © (14.08.05 12:18) [2]
max_12345 © (14.08.05 12:18) [2]
Хорошо, допустим для себя я выбрал один из критериев отличия этих двух чисел, вот код:function FindMagicNumber(const Src : String) : Double;
var
nums : array of Double;
i : Integer;
tmp : String;
d : Double;
begin
tmp := "";
for i := 1 to length(Src) do begin
if (Src[i] in ["0".."9"]) or ((Src[i] in [",", "."]) and (length(tmp) > 0)) then
tmp := tmp + Src[i]
else if length(tmp) > 0 then begin
try
tmp := StringReplace(StringReplace(tmp, ",", DecimalSeparator, []), ".", DecimalSeparator, []);
d := StrToFloat(tmp);
SetLength(nums, Length(nums) + 1);
nums[High(nums)] := d;
tmp := "";
except end;
end;
end;
d := 0;
for i := Low(nums) to High(nums) do begin
if ((nums[i] / 10000) > 1) and (nums[i] > d) then d := nums[i];
end;
Result := d;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
text = "Текст Текст Текст Текст Текст" + #13#10 +
"Текст Текст Текст Текст Текст" + #13#10 +
"Текст Текст Текст Текст Текст" + #13#10#13#10 +
"Всего было произведено изделий за месяц:8шт. на сумму...10500 рублей";
begin
ShowMessage(IntToStr(Trunc(FindMagicNumber(text))));
end;
← →
Юрий Зотов © (2005-08-14 13:31) [4]Зачем так много...
function GetLastNumber(const S: string): extended;
const
Digits = ["0".."9"];
var
i: integer;
R: string;
begin
i := Length(S);
while (i > 0) and not (S[i] in Digits) do
Dec(i);
if i <= 0 then
raise Exception.Create("Текст не содержит чисел");
R := "";
while (i > 0) and (S[i] in Digits + [",", "."]) do
begin
R := S[i] + R;
Dec(i)
end;
Result := StrToFloat(StringReplace(StringReplace(R, ".", DecimalSeparator, []), ",", DecimalSeparator, []))
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(FloatToStr(GetLastNumber(Memo1.Text)))
end;
← →
Zeqfreed © (2005-08-14 13:40) [5]Юрий Зотов © (14.08.05 13:31) [4]
> Зачем так много...
Я всего лишь выбрал другой критерий для отбора числа, нежели его положение в тексте. Безусловно, Ваш код для приведенного в качестве примера текста будет работать быстрее.
← →
Marser © (2005-08-14 13:42) [6]Ещё существует функция IsNumeric из модуля idGlobal.
← →
Anatoly Podgoretsky © (2005-08-14 14:26) [7]max_12345 © (14.08.05 12:18) [2]
а чем отличается Вы и сами знаете.
Вообще то нет, и то и другое числа
← →
max_12345 © (2005-08-14 20:05) [8]спасибо за всем за помощь.
А как теперь функцию и процедуру "связать" ???
procedure TForm1.Button1Click(Sender: TObject);
var
f: textfile;
fname: string;
str1: string;
begin
if not opendialog.Execute
then exit;
fname:=opendialog.FileName ;
edit1.Text:=opendialog.FileName;
form1.Caption:=fname;
assignfile(f, fname);
try
reset(f); //îòêðûòü äëÿ ÷òåíèÿ
except
on EInOutError do
begin
showmessage ("Ошибка доступа к файлу" + fname);
exit;
end;
end;
while not eof(F) do
begin
readln (f, str1);
begin
??????????????????????????????
end;
end;
closefile(f);
end;
← →
Zeqfreed © (2005-08-14 20:40) [9]max_12345 © (14.08.05 20:05) [8]
Как это ни странно, но довольно сложно догадаться что ты хочешь получить в результате, что из себя представляет файл, который ты хочешь открыть и что ты подразумеваешь под "связать процедуру и ф-цию", но наверно мы, опять же, "и сами знаем".procedure TForm1.Button1Click(Sender: TObject);
var
f : TextFile;
fname : string;
str1 : string;
d : Double;
begin
if not od.Execute then Exit;
fname := od.FileName ;
Edit1.Text := od.FileName;
Form1.Caption := fname;
AssignFile(f, fname);
try
reset(f);
except
on EInOutError do begin
ShowMessage ("Ошибка доступа к файлу "" + fname + """);
Exit;
end;
end;
Memo1.Clear;
while not EOF(f) do begin
Readln(f, Str1);
d := FindMagicNumber(Str1);
if d <> -1 then Memo1.Lines.Add(FloatToStr(d));
end;
Closefile(f);
end;
Возможно так?
← →
Alexander Panov © (2005-08-14 21:06) [10]Для того, чтобы понять, как можно вызвать процедуру или функцию, почитай любую книжку начального уровня по паскалю.
Форум не предназначен для использования в качестве учебного пособия вместо школьных уроков информатики, а этот вопрос именно к таким и относится.
← →
Anatoly Podgoretsky © (2005-08-14 23:48) [11]Zeqfreed © (14.08.05 20:40) [9]
наверно мы, опять же, "и сами знаем".
Кстати согласно вопроса и представленых данных должнп получиться строка 810500, что с ней делать, ну действительно наверно мы сами знаем.
Страницы: 1 вся ветка
Текущий архив: 2005.09.25;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.051 c