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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2009, 15:51   #11
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Цитата:
когда вы читаете с консоли, тобишь экран+клавиатура, в терминале, тогда вы можете задавать сколь угодно вводимых значений, потому что тогда компьютер понимает, сколько ему нужно принять данных, введенных пользователем
Вот внимательно перечиатйте то, что я написал - где здесь я не говорю о том, что с консоли будет читаться и обрабатываться по-другому - я говорю о том, что в терминале считывается каждое определенное значение процедуройй readln - вы можете задать readln ( a, b, c, d ) и он у вас будет принимать 4 значения, пока вы их не введете, а с текстовыми файлами так работать нельзя - читать из тектового файла можно только в одну переменную.
PS: Всем бы лишь опровергнуть, нежели нормально прочитать, что человек имел в виду
capta1n вне форума Ответить с цитированием
Старый 14.01.2009, 16:20   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

capta1n, я поэтому и обратил Ваше внимание на то, что Вы ошибаетесь!!
МОЖНО ТАК ЧИТАТЬ ИЗ ТЕКСТОВОГО ФАЙЛА!
В любой действующей программе можно заменить Read(X,Y,Z) (или ReadLn(X,Y,Z) )
на Read/ReadLn(F, X,Y,Z) - где F - это текстовый файл!!!!

Вот, посмотрите приложенный пример.

Внимание. Текстовый файл так сделан с форматированием (как текстовая таблица). Я писал об этом в своём предыдущем сообщении..


P.S. RgnRok - Вы тоже обязательно посмотрите пример. Может такой способ Вам больше понравится ;-)
Вложения
Тип файла: rar readFile.rar (3.6 Кб, 9 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.01.2009, 16:56   #13
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Цитата:
просто так не получится читать!
Обязательно нужно читать строчку из файла в строковую переменную, а дальше выделять нужные куски через Pos() и Copy()...
пишу так, приблизительно:
Код:
var
s : string;
k : integer;
...
i :=0 ;
while not eof(f) do
begin
readln(f,s);
if Pos('.',s)>3 then begin
i := i + 1;
a[i].surname := Copy(s,1,Pos('.',s)-3);
a[i].NameLetter := Copy(s,Pos('.',s)-2,2);
Delete(s,1,Pos('.',s));
Val(Copy(s,1,Pos(' ',s)-1,a[i].bal1,k);
Delete(s,1,Pos(' ',s));
Val(Copy(s,1,Pos(' ',s)-1,a[i].bal2,k);
Delete(s,1,Pos(' ',s));
Val(s,a[i].bal3,k);
end;
end;
Тогда не понимаю, зачем вы написали вот это и почему вы это написали, знав, что читать так можно из файла, а вы предложили другой вариант, сказав
Цитата:
просто так не получится читать!
Обязательно нужно читать строчку из файла в строковую переменную, а дальше выделять нужные куски через Pos() и Copy()...
capta1n вне форума Ответить с цитированием
Старый 15.01.2009, 11:01   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Тогда не понимаю, зачем вы написали вот это и почему вы это написали, знав, что читать так можно из файла, а вы предложили другой вариант, сказав
Поймите, обычно любую задачу можно решить кучей разных способов... Все они имеют как положительные, так и отрицательные стороны!

Применительно к данной задаче, можно сделать либо:

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

Подход 2: Программный код чтения максимально упрощён. Прямо в коде мы задаём сколько символов мы берём из файла в качестве имени, числа должны отделяться пробелом(-ами).
Плата за эту простоту - попробуйте между числа вставить какой-нибудь знак... он, естественно, не сможет быть корректно быть преобразован в число, в результате получите ошибку runtime error 106 и программа завершит свою работу... Для реальной жизни подобная ситуация НЕДОПУСТИМА! Потому что где, в какой строке и какую ошибку искать - абсолютно неясно.
Кроме того, этот подход требует ОБЯЗАТЕЛЬНО правильного форматирования исходного текстового файла. А далеко не всегда программист может влиять на то, в каком виде должны быть обрабатываемые программой данные.
Хотя, иногда и такой подход применим...
всё зависит от конкретной ситуации...

ну вот. Надеюсь, что раскрыл тему...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.01.2009, 12:43   #15
RgnRok
Пользователь
 
Аватар для RgnRok
 
Регистрация: 13.01.2009
Сообщений: 19
Хорошо

Большое спосибо за 2 вариант. Для дела конечно лучше использовать 1 вариант кода, но так как данная задача является просо заданием для практики, то нестоит сильно усложнять работу, и легче взять просто 2 код.
RgnRok вне форума Ответить с цитированием
Старый 15.01.2009, 15:51   #16
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Поймите, обычно любую задачу можно решить кучей разных способов... Все они имеют как положительные, так и отрицательные стороны!

Применительно к данной задаче, можно сделать либо:

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

Подход 2: Программный код чтения максимально упрощён. Прямо в коде мы задаём сколько символов мы берём из файла в качестве имени, числа должны отделяться пробелом(-ами).
Плата за эту простоту - попробуйте между числа вставить какой-нибудь знак... он, естественно, не сможет быть корректно быть преобразован в число, в результате получите ошибку runtime error 106 и программа завершит свою работу... Для реальной жизни подобная ситуация НЕДОПУСТИМА! Потому что где, в какой строке и какую ошибку искать - абсолютно неясно.
Кроме того, этот подход требует ОБЯЗАТЕЛЬНО правильного форматирования исходного текстового файла. А далеко не всегда программист может влиять на то, в каком виде должны быть обрабатываемые программой данные.
Хотя, иногда и такой подход применим...
всё зависит от конкретной ситуации...

ну вот. Надеюсь, что раскрыл тему...
нет времени это читать - я не думаю, что там что-то полезное для меня

Последний раз редактировалось capta1n; 15.01.2009 в 15:53.
capta1n вне форума Ответить с цитированием
Старый 15.01.2009, 22:31   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
нет времени это читать - я не думаю, что там что-то полезное для меня
да. согласен. теперь я думаю, что Вам это не поможет.
ну и ладно. главное, что TC это понятно...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужна помощь с добавлением файла 777UFO777 Общие вопросы Delphi 3 26.12.2008 12:01
чтение из файла Илья500 Общие вопросы C/C++ 26 05.12.2008 00:37
Чтение файла [Smarik] Помощь студентам 8 28.04.2008 22:15
чтение файла vicvtor Общие вопросы Delphi 4 27.11.2006 12:26