Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.01;
Скачать: CL | DM;

Вниз

Файлы Delphi   Найти похожие ветки 

 
Tatb9na ©   (2008-12-15 01:06) [0]

добрый вечер!
помогите начинающему!
ниже задание (все сделано), осталось реалтзовать проверку при открытие файла на нходящиеся в нем данные. типа данные д.б. только числовые и также при сохранении.
Приложение должно выводить на экран значения всех компонентов выбранного пользователем файла, а также вычислять и выводить на экран одну из следующих характеристик:
• количество чисел в файле;
• среднее арифметическое этих чисел;
• количество положительных чисел;
• количество четных чисел;
• максимальное значение.
Выбор файла должен осуществляться с помощью стандартного окна диалога.
Выбор характеристики должен осуществляться с помощью списка.


 
{RASkov} ©   (2008-12-15 01:11) [1]

> осталось реалтзовать проверку при открытие файла на нходящиеся в нем данные

Если остально все сделал, то тут-то в чем запнулся?


 
{RASkov} ©   (2008-12-15 01:16) [2]

> типа данные д.б. только числовые

В абсолютно любых, но не пустых(нулевого размера), файлах всегда есть числа...


 
Германн ©   (2008-12-15 01:26) [3]


> (все сделано), осталось реалтзовать проверку при открытие
> файла на нходящиеся в нем данные

Тогда ответь сначала на два вопроса.
1. Какой тип файла?
2. Что есть "число" в твоём понимании?


 
{RASkov} ©   (2008-12-15 01:27) [4]

Эх... Татьяна... Татьяна...:) Показывай как записывала и как читаешь файлы...


 
Германн ©   (2008-12-15 01:41) [5]


> {RASkov} ©   (15.12.08 01:27) [4]
>
> Эх... Татьяна... Татьяна...:) Показывай как записывала и
> как читаешь файлы...
>

Да ничего он не записывал и не считывал. Максимум он только "выбрал файл с помощью стандартного диалога".


 
{RASkov} ©   (2008-12-15 01:48) [6]

> [5] Германн ©   (15.12.08 01:41)

Я не люблю обманщиков :( И тем более не люблю хитро-вывернутых....
Если не приведет никаких своих примеров, проб.... не ждать ей(му) от меня помощи...)


 
Tatb9na ©   (2008-12-15 13:00) [7]

Файл текстовый...
открываю файл вот так:
procedure TForm1.Button3Click(Sender: TObject);
Var

a,b,c: string;
s2: string;
//a  : array of string;
err1,err2: integer;
i,j: integer;
begin
  i:=0;
 OD.Options:=OD.Options+[OfFileMustExist, OfPathMustExist];
 If OD.Execute
      then
      begin
       AssignFile(f,OD.FileName);
     {$I-}
     Reset(f);
     Err1:=IOResult;
     Readln(f,s2);
     err2:=IOResult;
     If (err1=0) and (err2=0)
         then
           begin
           Memo1.Lines.LoadFromFile(OD.FileName);

           end
     else
     ShowMessage("Невозможно считать данные из файла" +OD.FileName);
     CloseFile(f);
     {$I+}

     end;        end;


 
Сергей М. ©   (2008-12-15 13:06) [8]


> Файл текстовый


Ну так и грузи его сразу в Мемо, раз он у тебя текстовый.


 
{RASkov} ©   (2008-12-15 13:07) [9]

> [7] Tatb9na ©   (15.12.08 13:00)

И зачем все это шаманство? Да еще с таким форматированием :(
Вот тоже самое:
procedure TForm1.Button3Click(Sender: TObject);
begin
 with TOpenDialog.Create(nil) do try
  if Execute then try
   Memo1.lines.LoadFromFile(FileName);
  except
   ShowMessage("Невозможно считать данные из файла: "+FileName);
  end;
 finally
  Free;
 end;
end;


 
Tatb9na ©   (2008-12-15 13:22) [10]

не принимают у меня по причине того, если в файле какая-нит ьбуква, то все вычисления не работаают и  я не могу понять как сделать проверку.
далее я считываю файл в массив типа integer:

AssignFile(g,OD.FileName);
reset(f);
while not  eof(f)   do
       begin
       read(f,ir[i]);
       inc(i);
    end;
  CloseFile(f);

и если не все числа он должен выдать ошибку. в -общем я запуталась уже трындец как.


 
{RASkov} ©   (2008-12-15 13:26) [11]

StrToInt{Def}


 
Сергей М. ©   (2008-12-15 13:28) [12]


> не могу понять как сделать проверку


А куда ты складываешь прочитанные из файла "числа" ?


 
Tatb9na ©   (2008-12-15 13:43) [13]

в массив ir [i]


 
Сергей М. ©   (2008-12-15 13:46) [14]


> в массив ir [i]


Массив данных какого типа - целых или вещественных чисел ?


 
Tatb9na ©   (2008-12-15 13:55) [15]

integer


 
Сергей М. ©   (2008-12-15 14:01) [16]

Приведи фрагмент "правильного" содержимого файла ..


 
clickmaker ©   (2008-12-15 14:04) [17]

if TryStrToInt(S, val) then
 ir[i] := val
else
 пропустить или выдать сообщение, что файл неверного формата


 
Tatb9na ©   (2008-12-15 14:09) [18]

AssignFile(g,OD.FileName);
reset(f);
while not  eof(f)   do
       begin
       read(f,sss);
       id:=strtoint(sss);
       ir[i]:=id;
       inc(id);
    end;
  CloseFile(f);

а вот так можно и заключит все в блок try expect  с обработкой класса исключит ситуации:  EConvertError


 
Tatb9na ©   (2008-12-15 14:10) [19]

в файле может содержаться инфа след вида:
1 2 3 4 5 6 7
 8 9  10 11
12 13 14 15 16 17
18 19 20 21 22


 
clickmaker ©   (2008-12-15 14:16) [20]

> [18] Tatb9na ©   (15.12.08 14:09)

если стоит задача при любом неверном символе прекратить расчет, то да - try/except всего цикла
если задача - хоть что-то расчитать, даже при наличии в файле мусора, то [17]


 
Сергей М. ©   (2008-12-15 14:17) [21]

Можно.


 
Tatb9na ©   (2008-12-15 14:27) [22]

блин не получается ничего.
[Error] Unit1.pas(130): Statement expected, but expression of type "Class reference" found
begin
i:=1;
AssignFile(g,OD.FileName);
reset(f);  
while not  eof(f)   do
       begin
       read(f,sss);
         try
                 id:=strtoint(sss);
                 ir[i]:=id;
                 inc(id);
          except EConvertError do
                 showmessage("данные ошибочны");
          end;


 
Сергей М. ©   (2008-12-15 14:29) [23]

except
on EConvertError do


 
Tatb9na ©   (2008-12-15 14:33) [24]

вот блин тормоз


 
Tatb9na ©   (2008-12-15 14:35) [25]

зацикливается на открытие файла. типа данные ошибочны, данные ошибочны и т.д.


 
Palladin ©   (2008-12-15 14:37) [26]

ну ясен пень, у тебя же это в цикле


 
Tatb9na ©   (2008-12-15 14:38) [27]

даже если там только цифры


 
Сергей М. ©   (2008-12-15 14:40) [28]

А посмотреть реальное содержимое переменной sss перед выполнением try не судьба ? Или коран не позволяет ?


 
Palladin ©   (2008-12-15 14:45) [29]

Какого типа f ?


 
Tatb9na ©   (2008-12-15 14:47) [30]

я не волшебник, как ВЫ все- я только учусь. и у меня половину наворотов еще под висту не пашет. вот :(


 
Сергей М. ©   (2008-12-15 14:57) [31]


> не волшебник


Да-да, ты волшебница)

"Итак, она звалась Tatb9nой" (c) АС

)

var
id: Integer;
..
while not  eof(f)  do
 try
   read(f,id);
...
 except
   ShowMessage("Хреновый файл !");
 end;


 
Сергей М. ©   (2008-12-15 15:00) [32]


> половину наворотов еще под висту не пашет. вот


Не надо нести отсебячину.
В задании нет ни слова ни про Висту, ни про "навороты", ни про "пахоту".
Делай в точности то что сказал препод.
Вот.


 
Tatb9na ©   (2008-12-15 15:28) [33]

не фига не работает. даже если в файле одни цифры. не корректный файл и все тут.
тип переменной f - textfile


 
Palladin ©   (2008-12-15 15:33) [34]

Var
 f:TMemoryStream;
 p:PChar;
 s:String;
 i:Integer;

Begin
 f:=TMemoryStream.Create;
 Try
  f.LoadFromFile(имя файла);
  p:=f.Memory;
  s:="";
  For i:=0 to f.Size-1 Do
   s:=s+"#"+IntToStr(Byte(p[i]));
 Finally
  f.Free;
 End;
 ShowMessage(s);
End;


что кажет?


 
Сергей М. ©   (2008-12-15 15:41) [35]


> Tatb9na ©   (15.12.08 15:28) [33]


А у меня работает.
Что я делаю неправильно ?


 
Tatb9na ©   (2008-12-15 15:43) [36]

ничего не кажет, теперь не считает все остальное. чорт!!!


 
Tatb9na ©   (2008-12-15 15:43) [37]

procedure TForm1.Button2Click(Sender: TObject);
var ir: array [1..10000] of integer;
i,id,m,mm,err,k,zn:integer;
ss,sss:string;
sum,w:real;
f7:tmemorystream;
p:pchar;
begin
i:=1;
f7:=tmemorystream.Create;
try
f7.LoadFromFile(od.FileName);
p:=f7.Memory;
ss:="";
for i:=1 to f7.Size-1 do
s:=s+"#" + inttostr(byte(p[i]));
finally
f7.Free;
end;
showmessage(ss);

{AssignFile(g,OD.FileName);
reset(f);    try
while not  eof(f)   do

       begin
                 read(f,sss);
              //   showmessage(sss);
                id:=strtoint(sss);
                ir[i]:=id; inc(id);
//if TryStrToInt(sss, id) then    begin
//ir[i] := id;      
end
//else
              except on Exception : EConvertError do
                begin
                showmessage("Íå êîððåêòíûé ôàéë!");
                 exit;
                 
          end;        end;
  CloseFile(f);  }    
   m:=i;
   k:=0;
   if cbdeistv.ItemIndex=-1 then     showmessage("âûáåðèòå äåéñòâèå")
   else
 case CBDeistv.ItemIndex    of
 0: begin
       for i:=1 to m do
         begin
          k:=k+1;
          end;
        str((k-1),ss);
      showmessage("êîëè÷åñòâî ÷èñåë  " + ss);
     end;  
 1:   begin
      sum := 0;
      for i:=1 to m do
         begin
         k:=k+1;
         sum:=sum+ir[i];
         end;
        str((sum/k):4:2,ss);
      showmessage("ñðåäíåå àðèôìåò  " + ss);
     end;
 2:  begin
      for i:=1 to m do
         begin
         if ir[i]>0 then
         k:=k+1;
          end;
        str(k,ss);
      showmessage("êîëè÷åñòâî ïîëîæèò  " + ss);
     end;
 3:  begin
      for i:=1 to m do
         begin
           zn:=ir[i];
           if (zn mod 2 = 0) then
                     begin
                            k:=k+1;
                     end;
          end;
        str((k-1),ss);
      showmessage("êîëè÷åñòâî ÷åòíûõ  " + ss);
     end;
4:begin
     zn:=ir[1];
      for i:=1 to m do
         begin
            if ir[i] > zn then
                     begin
                            zn:= ir[i];
                     end;
          end;
        str(zn,ss);
      showmessage("max ýëåìåíò  " + ss);
     end;
    end;
 end;

end.


 
Tatb9na ©   (2008-12-15 15:44) [38]

может что-то неправильно делаю я ?


 
Palladin ©   (2008-12-15 15:46) [39]


> for i:=1 to f7.Size-1 do s:=s+"#" + inttostr(byte(p[i]));

ясен пень ничего казать не будет, может внимательней будешь код воспроизводить?


 
Palladin ©   (2008-12-15 15:47) [40]

даже переписать код нормально не можешь, давай внимательней в следующий раз

и не с 1, а с 0, что за дела вообще?


 
Tatb9na ©   (2008-12-15 15:50) [41]

я исправлюсь. я холосая... я уже раньше исправила. :(((


 
Сергей М. ©   (2008-12-15 15:50) [42]


> Tatb9na ©   (15.12.08 15:44) [38]


Ты вообще в код в [31] вникло ?
Подчеркнутое там видишь ?


 
Palladin ©   (2008-12-15 15:53) [43]


> Tatb9na ©   (15.12.08 15:50) [41]

это все понятно, что в ss находится?

да и что тут за фигня?


> reset(f);    trywhile not  eof(f)   do         begin    
>              read(f,sss);               //   showmessage(sss);
>                  id:=strtoint(sss);                 ir[i]:
> =id; inc(id);//if TryStrToInt(sss, id) then    begin //ir[i]
> := id;       end//else               except on Exception
> : EConvertError do                 begin                
> showmessage("Íå êîððåêòíûé ôàéë!");                  exit;
>                              end;        end;   CloseFile(f);
>   }  


тебе Сергей рабочий код привел, а ты все пляшешь со своим бубном вокруг strtoint


 
Tatb9na ©   (2008-12-15 16:01) [44]

вы меня тут конечно извините. ну не получается у меня ничего. у меня ни тот ни этот код не работает. я уже все ререпробывала из вышепредложенного.

и эта фигня выше у меня в комментах стоит


 
Сергей М. ©   (2008-12-15 16:05) [45]


> не получается у меня ничего


И каковы твои дальнейшие предложения ?


 
Tatb9na ©   (2008-12-15 16:06) [46]

убиться ап стенку


 
Tatb9na ©   (2008-12-15 16:07) [47]

буду дальше мучится, глядишь что-нить получится


 
Сергей М. ©   (2008-12-15 16:08) [48]

Аминь.


 
Tatb9na ©   (2008-12-15 16:09) [49]

;) пасиб)))за помощь....


 
Сергей М. ©   (2008-12-15 16:14) [50]


> пасиб


Не за что. Носи не стаптывай.


 
{RASkov} ©   (2008-12-15 20:00) [51]

> [19] Tatb9na ©   (15.12.08 14:10)

Пробелы между цифр - тоже "плохие символы" и перевод каретки тоже, а read(f, ss); читает за раз всю строку....


 
Tatb9na ©   (2008-12-15 20:18) [52]

и как же быть тогда????


 
{RASkov} ©   (2008-12-15 20:37) [53]

> [52] Tatb9na ©   (15.12.08 20:18)

Как на счет [42], Точнее [31]?


 
Tatb9na ©   (2008-12-15 21:21) [54]

Не переходит по ветке except.
Правда если данные не корректы ошибку дает: типа не тот формат!

while not  eof(f)   do
        try
                  begin
                    read(f,id);
                   ir[i]:=id;
                  inc(i);
                 end;//от begin

             except on EConvertError do
             begin
                showmessage("не корректно!");
              exit;

        end;   //от try


 
Anatoly Podgoretsky ©   (2008-12-15 21:36) [55]

> Tatb9na  (15.12.2008 21:21:54)  [54]


except on EConvertError do
begin
  showmessage("не корректно!");
  exit;
end;


 
Anatoly Podgoretsky ©   (2008-12-15 21:39) [56]


> except
>   showmessage("не корректно!");
>   exit;
> end;


 
Tatb9na ©   (2008-12-15 21:49) [57]

СПАСИБО!СПАСИБО!СПАСИБО!!!
целый день мучилась ведь!!!

Ну мне очень интересно почему не сработала ошибка EConvertError???

Теперь наеврн логично сделать проверку на то пусто в файле или нет....

СССПППППАААААССССССССССИИИИИИИИИИБОООООО!


 
Сергей М. ©   (2008-12-16 08:24) [58]


> СССПППППАААААССССССССССИИИИИИИИИИБОООООО!
>


И незачем так орать.


> логично сделать проверку на то пусто в файле или нет


А это что, по-твоему

while not  eof(f)   do

?


 
Tatb9na ©   (2008-12-16 12:06) [59]

я не правильно выразилась. вывод предупреждающего сообщения имела ввиду.
спасибо, говорю!
Если человек счастлиВ, почему бы и не крикнуть об этом! ;)


 
Сергей М. ©   (2008-12-16 12:20) [60]


> вывод предупреждающего сообщения имела ввиду


Сразу после открытия файла (Reset) вызови тот же самый Eof, по результату ветви свой алгоритм нужным образом.



Страницы: 1 2 вся ветка

Текущий архив: 2009.02.01;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.018 c
2-1229502902
zorik
2008-12-17 11:35
2009.02.01
перевод каретки


2-1229785294
buzb
2008-12-20 18:01
2009.02.01
Как сделать listbox полосатым


15-1228730968
aston2204
2008-12-08 13:09
2009.02.01
Определить СУБД по файлу БД


11-1196724955
Koss
2007-12-04 02:35
2009.02.01
при запуске открывает Form2 ???


15-1228556634
vrem
2008-12-06 12:43
2009.02.01
Новая опера 10 - быстрее на 30 %