IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> чтение текстового файла
doorway
сообщение 20.09.2010 21:46
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


есть текстовый файл:
Код
1 2
3


как эти цифры присвоить переменным a, b, c. что-то у меня не получается, напишите, пожалуйста, кому не лень только блок с read
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.09.2010 21:56
Сообщение #2


Гость






var a, b, c: integer;
// ...
read(f, a, b, c);



Я надеюсь, уроки из прошлой темы извлечены, и теперь признаки конца строки соответствующие в файле? smile.gif
 К началу страницы 
+ Ответить 
doorway
сообщение 20.09.2010 22:10
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 20.09.2010 22:56) *

var a, b, c: integer;
// ...
read(f, a, b, c);



Я надеюсь, уроки из прошлой темы извлечены, и теперь признаки конца строки соответствующие в файле? smile.gif


ага, понял все, вот просто у меня есть текстовый файл, там данные типа

Код
<string> <integer> <char>
(типы разделены пробелами),

вот их не получается считать таким способом

Сообщение отредактировано: doorway - 20.09.2010 22:11
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 20.09.2010 22:12
Сообщение #4


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Ну так любую цифру (1 2 3 твои) можно считать как в string, так и в integer, и в char...

Ну если там перенос после 2, то наверное надо:

readln(f, a, b);
read(f, c);


Сообщение отредактировано: Unconnected - 20.09.2010 22:13


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 20.09.2010 22:22
Сообщение #5


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


проблема в том, что в таком случае надо точно знать какое количество символов отводится на <string>. Т.е:
var a:string; b: integer; c: char; k: byte;
// ...
read(f, a: k, b, c);


Сообщение отредактировано: sheka - 20.09.2010 22:23
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
doorway
сообщение 20.09.2010 22:25
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Цитата(Unconnected @ 20.09.2010 23:12) *

Ну так любую цифру (1 2 3 твои) можно считать как в string, так и в integer, и в char...

Ну если там перенос после 2, то наверное надо:

readln(f, a, b);
read(f, c);


получается так:
файл такой:
Код
aaa 1
2


код
a:string;
b,c: integer;
...
readln(f, a, b);
read©;
write(a,'--',b,'--',c);


выводит aaa 1--2--0

т.е., если первая переменная(a) при чтении файла имеет тип стринг, то данные с файла в переменную будут читаться не до пробела, а до конца строки. провел ни один эксперимент уже

Добавлено через 10 мин.
Цитата(sheka @ 20.09.2010 23:22) *

проблема в том, что в таком случае надо точно знать какое количество символов отводится на <string>. Т.е:
var a:string; b: integer; c: char; k: byte;
// ...
read(f, a: k, b, c);



Сообщение отредактировано: doorway - 20.09.2010 22:49
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.09.2010 22:37
Сообщение #7


Гость






Цитата
т.е., если первая переменная(a) при чтении файла имеет тип стринг, то данные с файла в переменную будут читаться не до пробела, а до конца строки.
Разумеется. Потому что строка из файла читается
1) либо до тех пор, пока выделенное под нее место не будет заполнено полностью
2) либо пока не встретится #13(символ конца строки). Всё, больше ничего. Пробел концом строки не является.

Вообще-то это один из первых советов при работе с текстовыми файлами: не использовать смешанные списки ввода. Нужно читать в строку до пробела - читай посимвольно (Char-ом) и соединяй символы в строку.

Цитата
проблема в том, что в таком случае надо точно знать какое количество символов отводится на <string>
Проблема - в том, что при ЧТЕНИИ нельзя указывать ширину поля, только при ЗАПИСИ это возможно.
 К началу страницы 
+ Ответить 
doorway
сообщение 20.09.2010 22:49
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


есть файл из 10 строк, где записаны в строке
фамилию год пол

так вот эти данные надо считать и сравнить людей по годам, я собирался считать циклом каждую часть строки в двумерный массив. в один стринговый массив фамилию, в другой целый год, и в чарный пол. вот загвоздка на том, что первая идет фамилия стринговый тип и считывает всю строку.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 20.09.2010 22:55
Сообщение #9


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Читай по строке в string, а потом эту строку разбивай на фамилию, год и пол, с помощью функций copy и pos.

Сообщение отредактировано: Unconnected - 20.09.2010 22:55


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
doorway
сообщение 21.09.2010 0:17
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Цитата(Unconnected @ 20.09.2010 23:55) *

Читай по строке в string, а потом эту строку разбивай на фамилию, год и пол, с помощью функций copy и pos.


впринципе можно. а как получится, год же должен быть интегер
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 21.09.2010 1:48
Сообщение #11


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(doorway @ 21.09.2010 1:17) *
как получится, год же должен быть интегер
Используй процедуру Val


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
doorway
сообщение 21.09.2010 21:46
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Цитата(Lapp @ 21.09.2010 2:48) *

Используй процедуру Val


процедуры нельзя в программе использовать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 21.09.2010 22:47
Сообщение #13


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Если я не ошибаюсь, read - тоже процедура.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
doorway
сообщение 21.09.2010 22:59
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Цитата(sheka @ 21.09.2010 22:46) *

var a:string; b: integer; c: char; k: byte;
// ...
read(f, a: k, b, c);



в read после : говорит, что нужна ), почему?

Сообщение отредактировано: doorway - 21.09.2010 23:01
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 22.09.2010 1:12
Сообщение #15


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(doorway @ 21.09.2010 23:59) *
в read после : говорит, что нужна ), почему?
Может, не после, а вместо?
Потому что в Паскале нет форматного read (как тебе уже говорил volvo). Строка читается до конца.
Сообщение, я согласен, не очень точное - там может быть и запятая..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
doorway
сообщение 22.09.2010 16:07
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Цитата(Lapp @ 22.09.2010 2:12) *

Может, не после, а вместо?
Потому что в Паскале нет форматного read (как тебе уже говорил volvo). Строка читается до конца.
Сообщение, я согласен, не очень точное - там может быть и запятая..

а если надо считать строку только первые 15 символов?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.09.2010 16:57
Сообщение #17


Гость






doorway, ответы надо не просматривать, а читать. Внимательно читать.

Цитата
а если надо считать строку только первые 15 символов?

И об этом я тоже написал. Повторять как-то не особо хочется. Ибо не факт, что ты соизволишь прочесть со второй попытки.
 К началу страницы 
+ Ответить 
sheka
сообщение 22.09.2010 22:35
Сообщение #18


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Виноват. Забыл. Хотел написать следующее:
var a:string[15]; b: integer; c: char; k: byte;
// ...
read(f, a, b, c);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.09.2010 22:41
Сообщение #19


Гость






Ответ неверный smile.gif В C будет совсем не то, что ты ожидаешь smile.gif
 К началу страницы 
+ Ответить 
sheka
сообщение 22.09.2010 23:11
Сообщение #20


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Дык я не обращал внимание на это, ведь о строке думал :yes:
Согласен, там будет пробел, верно?
var a:string[15]; b: integer; c: char; k: byte;
// ...
read(f, a, b, c, с);

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 11:10
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"