Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2006, 01:09   #1
_rav
Новичок
Джуниор
 
Регистрация: 18.11.2006
Сообщений: 2
По умолчанию проблема с файлом

program inout;
{$APPTYPE CONSOLE}
uses
SysUtils;
var f1,f2:TextFile;
mas:array of double;
cnt,i:integer;
str:string;

begin
{ TODO -oUser -cConsole Main : Insert code here }
cnt := 0;
if not FileExists('Input.txt') then
begin
writeln('Input.txt doesn''t exist');
readln;
exit;
end;

AssignFile(f1,'Input.txt');
Reset(f1);
Writeln('Hello, Medved!');

while not Eof(f1) do
begin
Readln(f1,str);
if (str <> '') then
begin
mas[cnt] := StrToFloat(str);// ?????
cnt := cnt + 1;
end;
str :='';// Как правильно почистить str ?
end;

Writeln('The mas:');
SetLength(mas,cnt);

for i := Low(mas) to High(mas) do
begin
Writeln(mas[i]);
end;

Close(f1);
end.

Помогите новичку! Нужно, чтобы прога считала из txt файла массив double(каждая строка - число) и сформировав массив double вывела на консоль. В чем ошибка не пойму - массив не формируется ?

Последний раз редактировалось _rav; 18.11.2006 в 01:22.
_rav вне форума Ответить с цитированием
Старый 18.11.2006, 08:20   #2
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

интересно получается, ты объявляешь динамический массив, что-то пытаешь в него внести, а лишь потом задаёшь его размер!

Кароче вот что надо делать:

Код:
program inout;
{$APPTYPE CONSOLE}
uses
SysUtils;
var f1,f2:TextFile;
mas:array of double;
cnt,i:integer;
str:string;

begin
{ TODO -oUser -cConsole Main : Insert code here }
cnt := 0;
if not FileExists('Input.txt') then
begin
writeln('Input.txt doesn''t exist');
readln;
exit;
end;

AssignFile(f1,'Input.txt');
Reset(f1);
Writeln('Hello, Medved!');

while not Eof(f1) do
begin
Readln(f1,str);
if (str <> '') then cnt := cnt + 1; //здесь ты определишь: сколько у тебя будет чисел
end;
close(f1);
reset(f1);
SetLength(mas,cnt); //задаёшь размер массива

cnt:=0;
while not Eof(f1) do
begin
Readln(f1,str);
if (str <> '') then
begin
mas[cnt] := StrToFloat(str);
cnt := cnt + 1;
end;
end;

Close(f1);
Writeln('The mas:');

for i := Low(mas) to High(mas) do
begin
Writeln(mas[i]);
end;
end.
Цитата:
Как правильно почистить str ?
А зачем это вообще делать?
zetrix вне форума Ответить с цитированием
Старый 18.11.2006, 17:56   #3
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

str :='';// Как правильно почистить str ?

str:=''; - так правильно.

посмотри ещё

str:=nil; ....
Alar вне форума Ответить с цитированием
Старый 18.11.2006, 18:18   #4
X=Vitamin=X
Пользователь
 
Аватар для X=Vitamin=X
 
Регистрация: 18.11.2006
Сообщений: 32
По умолчанию

Цитата:
Сообщение от zetrix Посмотреть сообщение
интересно получается, ты объявляешь динамический массив, что-то пытаешь в него внести, а лишь потом задаёшь его размер!
Не в этом дело ! ! !
Он переменной cnt изначальное значение задал 0, а надо 1, т.к. массив индексируется с первого элемента, а не с нулевого! ! !
Незнание - рабство, знание - свобода ! ! !
X=Vitamin=X вне форума Ответить с цитированием
Старый 18.11.2006, 18:27   #5
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от X=Vitamin=X Посмотреть сообщение
Не в этом дело ! ! !
Он переменной cnt изначальное значение задал 0, а надо 1, т.к. массив индексируется с первого элемента, а не с нулевого! ! !
можно и с нулевого, даже нужно.

Но сначало надо задать его размерность.
Alar вне форума Ответить с цитированием
Старый 18.11.2006, 22:15   #6
_rav
Новичок
Джуниор
 
Регистрация: 18.11.2006
Сообщений: 2
По умолчанию

спасибо, заработало. я просто хотел за одно открытие файла перенести массив. в принципе можно попробовать использовать списки, но массив по смыслу задачи ожидается около 1000 чисел, список будет не очень удобен для дальнейшей обработки.
_rav вне форума Ответить с цитированием
Старый 19.11.2006, 13:31   #7
X=Vitamin=X
Пользователь
 
Аватар для X=Vitamin=X
 
Регистрация: 18.11.2006
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
можно и с нулевого, даже нужно.

Но сначало надо задать его размерность.
Размерность - дк это да, а индексировать всеравно надо с первого, с нулевого - он будет дико ругатся(хотя кто знает )
По крайней мере я после Паскаля всегда индексирую с 1го...
Незнание - рабство, знание - свобода ! ! !

Последний раз редактировалось X=Vitamin=X; 19.11.2006 в 13:33.
X=Vitamin=X вне форума Ответить с цитированием
Старый 19.11.2006, 15:58   #8
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

X=Vitamin=X, можешь хоть с 10 добавлять, и работать с элементами массива от 10....

Массив начинаеться с 0, это надо знать.
Alar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с ini файлом workres Общие вопросы C/C++ 5 24.04.2011 22:25
Работаю с текстовым файлом есть небольшая проблема Parcenson Общие вопросы Delphi 2 13.08.2008 06:46
Помогите с файлом snake-as Общие вопросы Delphi 5 26.04.2008 00:08
работа с txt файлом ShenDy Общие вопросы C/C++ 1 08.04.2008 22:55
Проблема с файлом setup на visual basic. irbiss Помощь студентам 5 03.04.2008 15:41