Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

необходимо удалить текст оставить цифры   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.03 c
14-1125685110
hgd
2005-09-02 22:18
2005.09.25
Можно заменить страницу на сайте


5-1100763658
Valerman
2004-11-18 10:40
2005.09.25
Перемаргивание компонентов при прорисовке ???


11-1107213647
Sphinxx
2005-02-01 02:20
2005.09.25
Создание компонент runtime


14-1123747180
Kerk
2005-08-11 11:59
2005.09.25
Moscow Mastak Party Special Edition


1-1125577892
CatiL
2005-09-01 16:31
2005.09.25
Как сделать один из ItemIndex ComboBoха неактивным





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