Главная страница
    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, что за дела вообще?


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

Наверх





Память: 0.61 MB
Время: 0.006 c
2-1229518836
abhtr
2008-12-17 16:00
2009.02.01
Как определить кодировку строчки


2-1229374412
bit
2008-12-15 23:53
2009.02.01
TListView get item


3-1214285735
Alex7
2008-06-24 09:35
2009.02.01
Что может конструкция IIF ? ( MS SQL)


2-1229584982
CodeMaster
2008-12-18 10:23
2009.02.01
Прокрутка в TListBox


2-1229521652
Michael
2008-12-17 16:47
2009.02.01
MainMenu - создание на MDIChild





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