IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Помогите с Pascal Опять и Снова (https://www.imho.ws/showthread.php?t=96339)

GreatLion 23.11.2005 10:24

Помогите с Pascal Опять и Снова
 
Спасибо всем кто помго с предыдущим вопросом, но возник ноый. У меня никак не получилось считать из файла какие-то слова отдельно. Содержание файла D:\input.dat :
yes no yes no
Вот текст проги который я пытался :

program num;
var a,b:string;f:Text;

begin
assign(f,'d:\input.dat');
reset(f);
read(f,a);
read(f,b);
write(a,' - ',b);
read(a);{}
end.


выводит:
yes no yes no -
т.е. если тип string, то она считывает по строкам.
А если написать a,b : char, то она считывает по символам, т.е.
y - e
Помогите пожалуйста. Как сделать, чтобы она считывала по словам.
Т.е. она должна вывести yes - no. :confused:

ЕЖ 23.11.2005 10:34

Приводи текст программы и укажи каким текстовым редактором ты набираешь текст.

GreatLion 23.11.2005 10:39

Текст проги:


program num;
var a:integer;f:file of integer;

begin
assign(f,'d:\input.dat');
reset(f);
read(f,a);
write(a);
read(a);{}
end.

Выводит:
13874

Содержание d:\input.dat:

26


Текстовый редактор - Turbo Pascal 7.0

Al-x 23.11.2005 10:46

Попробуй объявить файловую переменную так:
Код:

var f        : text;
А после чтения из файла процедурой val() приводить к числу.

UPD: По идее так должно работать:
Код:

program num;
var a,code:integer;
f:Text;
buf:string;

begin
 assign(f,'d:\input.dat');
 reset(f);
 readln(f,s);
 val(s,a,code);
end.


GreatLion 23.11.2005 10:55

Большое спасибо. Получилось. Оказывается, надо было переменную объявить как Text, а считывать числа. Еще раз спасибо!

ЕЖ 23.11.2005 11:02

Всё элементарно: когды ты в текстовом редакторе пишешь 26, то у тебя образуется два символа с шестнадцатеричными кодами 32 и 36. Когда ты читаешь из файла, при этом объявляя его типизированым file of int, то эти два кода воспринимаются как слово (два байта, 36 - старший, 32 - младший) и оно читается в твою целую двубайтовую переменную a. Если ты переведешь шестнадцатеричное 3632 в десятичное, то получишь как раз 13874.

Решение - читать файл не как типизированный целый, а как текстовый, и преобразовывать считанную строку в целое.

Al-x
Чутка опередил :yees:


Часовой пояс GMT +4, время: 09:07.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.