Форум: "Начинающим";
Текущий архив: 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