Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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); //&#238;&#242;&#234;&#240;&#251;&#242;&#252; &#228;&#235;&#255; &#247;&#242;&#229;&#237;&#232;&#255;
  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.5 MB
Время: 0.059 c
8-1115611310
Viktop
2005-05-09 08:01
2005.09.25
Проиграть музыку из ресурса


6-1117604167
CSTR
2005-06-01 09:36
2005.09.25
Проблема с сокетами


14-1125469229
syte_ser78
2005-08-31 10:20
2005.09.25
Совместимость фирменной эпсоновской краски с другими.


14-1125252689
Twister1222
2005-08-28 22:11
2005.09.25
Сомнения Delphi2005


2-1124395838
Пантелеев Иван
2005-08-19 00:10
2005.09.25
Наличие файла