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

Вниз

Файлы 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, что за дела вообще?



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

Форум: "Начинающим";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.007 c
2-1229527656
Tatb9na
2008-12-17 18:27
2009.02.01
Графики


15-1228841083
zheka
2008-12-09 19:44
2009.02.01
Scellam distribution


6-1197549758
mary
2007-12-13 15:42
2009.02.01
idtcpclient


15-1228640979
Том
2008-12-07 12:09
2009.02.01
Подскажите, что за мелодия


2-1229451823
smartleds
2008-12-16 21:23
2009.02.01
Еще вопрос, у меня долго прорисовывается форма





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