Ошибка времени выполнения чтение после конца потока невозможно

G1gg13s

0 / 0 / 0

Регистрация: 30.01.2016

Сообщений: 21

1

Ошибка времени выполнения: Чтение после конца потока невозможно

28.02.2016, 21:32. Показов 10873. Ответов 5

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Ошибка в строке 9.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
  A: file of integer;
  B, I, J: integer;
begin
  assign(A, 'D:KEK.txt');
  reset(A);
  while not eof(A) do
    begin
      read(A, B);
      write(B);
    end;
  seek(A, 3);
  read(A, I);
  seek(A, 5);
  read(A, J);
  seek(A, 3);
  write(A, J);
  seek(A, 5);
  write(A, I);
  close(A);
end.



0



318 / 208 / 162

Регистрация: 08.12.2015

Сообщений: 863

28.02.2016, 23:29

2

Вы пытаетесь из текстового файла прочитать как из файла с переменными. Это несколько неверно. seek тоже даст далее ошибку. Так-же , в 17 и 19 строках тоже будет ошибка, пытаетесь записать в тот же файл, не открыв его на запись. В общем, задание неизвестно ,как исправить — непонятно.



0



0 / 0 / 0

Регистрация: 30.01.2016

Сообщений: 21

29.02.2016, 20:37

 [ТС]

3

Есть текстовый файл с текстом ‘123456’ и нужно заменить 3 и и 5 элементы.



0



Почетный модератор

64289 / 47588 / 32739

Регистрация: 18.05.2008

Сообщений: 115,181

29.02.2016, 20:49

4

Лучший ответ Сообщение было отмечено G1gg13s как решение

Решение

А как создан файл А, он точно типизированный?



1



0 / 0 / 0

Регистрация: 30.01.2016

Сообщений: 21

29.02.2016, 20:50

 [ТС]

5

Я — е*лан, сори. Я понял, люблю тебя :*, пусик



0



Puporev

Почетный модератор

64289 / 47588 / 32739

Регистрация: 18.05.2008

Сообщений: 115,181

29.02.2016, 20:53

6

Лучший ответ Сообщение было отмечено G1gg13s как решение

Решение

А зачем у него расширение да еще и txt? Как Вы его создавали?
При чтении типизированного файла целых чисел не может быть ошибки в этом

Pascal
1
2
3
4
5
6
reset(A);
  while not eof(A) do
    begin
      read(A, B);
      write(B);
    end;



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

29.02.2016, 20:53

Помогаю со студенческими работами здесь

Чтение после конца потока невозможно
Выдаёт такую ошибку. Помогите :-|

С чем связана ошибка:»Чтение после конца потока невозможно»
С чем связана ошибка:"Чтение после конца потока невозможно".

Подпрограмма выдает ошибку времени выполнения: Чтение после конца потока невозможно
Дан файл, содержащий сведения об игрушках: указывается название игрушки, ее стоимость в рублях и…

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите.
В Pascal’e я не силен, так что не бейте меня ногами, но есть задача: написать…

Чтение после конца потока невозможно
Сам код:

Uses Crt;
var i,k:integer;
f: file;
a,b:real;
Begin
Assign(f,…

Чтение после конца потока невозможно
var f:file of integer;
i,a,max,l:integer;
begin
assign(f,’f.txt’);
reset(f);
i:=0;
while…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

6

В паскале (да и не только) данные в типизированном файле (в вашем случае — file of integer) хранятся в шестнадцатиричном виде. В паскале integer занимал 2 байта, именно поэтому выскочила ошибка «Чтение после конца потока невозможно», ведь «8» — это один байт.

Если вы хотите читать целые числа из текстового файла, используйте TextFile (или Text в олдскульном варианте). Для freepascal, pascalABC.NET и Delphi это будет так:

var 
  a : integer; 
  f : TextFile;
begin
  AssignFile(f, 'f.txt');
  Reset(f);
  //Seek(f, 0);
  Read(f, a); // a = 8, хотя лучше читать сразу всю строку, используя несколько переменных

  <...>
 CloseFile(f);

end.

А в варианте для Turbo Pascal и самых первых версий Delphi — так:

var 
  a : integer; 
  f : Text;
begin
  Assign(f, 'f.txt');
  Reset(f);
  //Seek(f, 0);
  Read(f, a); { a = 8 поскольку в Turbo Pascal // не было комментарием :) }

  <...>
  Close(f);
end.

type
  base = record
    n1, n2: string[15];
    tel: string[4];
    d, m: byte;
    y: integer;
  end;
 
var
  r: base;
  a: array [1..10] of base; f: file of base; 
  i: integer;
 
begin
  assign(f, 'in.dat');
  rewrite(f); // создаем новый файл
  for i := 1 to 10 do // заполняем его 10 значениями "от балды", чтобы был понятен принцип
  begin
    r.d := i; r.m := i; r.y := i; // тут тестовые значения
    r.n1 := 'start';
    r.n2 := 'finish';
    r.tel := '3234';
    write(f, r); // пишем структуру в файл
  end;
  close(f);
  
  reset(f); // переоткрываем файл уже для чтения
  i := 0;
  while not eof(f) do // и читаем содержимое в массив a
  begin
    inc(i);
    read(f, a[i]); // в этой строке не показывает никакой ошибки
  end;
  close(f);
end.

Приветствую, мне требуется ваша помощь, уже не знаю, что делать, весь интернет перерыл, и всем помогает Position = 0,а мне нет.

private static byte[] buffer = new byte[1024];
    private static MemoryStream stream = new MemoryStream(buffer);
    private static BinaryWriter writer = new BinaryWriter(stream);
    private static BinaryReader reader = new BinaryReader(stream);

    private List<string> listCode = new List<string>();

void ReceiveData()
    {
        int bytes = 0;

        EndPoint remoteIp = new IPEndPoint(IPAddress.Any, 0);
        listCode.Clear();

        do
        {
            bytes = socket.ReceiveFrom(buffer, ref remoteIp);
        }
        while (socket.Available > 0);


        bool getData = true;

        stream.Position = 0;

        try
        {
            while (getData)
            {
                string data = reader.ReadString(); // ВОТ ТУТ КОД ВЫДАЕТ ИСКЛЮЧЕНИЕ ПОСЛЕ ТОГО КАК ДАННЫЕ С СЕРВЕРА ПРИХОДЯТ 2-ОЙ РАЗ
                if (data != "")
                    listCode.Add(data);
                else
                    getData = false;
            }
        }
        catch(Exception ex)
        {
            Debug.Log(ex.Message);
        }

        stream.SetLength(0);
        stream.Position = 0;

        IPEndPoint remoteFullIP = remoteIp as IPEndPoint;
    }

Подскажите пожалуйста! Всем спасибо!

Всем доброго времени суток, столкнулся с проблемой

Чтения после конца потока невозможно

Дело в том что я читаю бинарный файл :

 while (reader2.PeekChar() > -1)
 {

    numb2 = reader2.ReadInt32();

    Int32 ndef2 = reader2.ReadInt32();

    BitVector32 bv2 = new BitVector32(ndef);

    int nr2 = bv2[nr_s];

    y2 = bv2[y_s];

    int sm2 = bv2[sm_s];

    ds2 = bv2[d_s];

    ms2 = bv2[m_s];

    int rs2 = bv2[r_s];

}

И так получилось что numb2 имеет запись в файле поэтому reader2.PeekChar() > -1 больше 1, но вот ndef2 уже нету в файле, и я получаю ошибку чтения после конца потока, может есть более правильный метод инициализации данных в файле, и если дальше записи нет, то просто передать 0 и перейти дальше, либо пропускать и идти дальше, просто не хотелось бы делать что-то вроде:

 while (reader2.PeekChar() > -1)
 {

    numb2 = reader2.ReadInt32();

  if (reader2.PeekChar() > -1){

    Int32 ndef2 = reader2.ReadInt32();

    BitVector32 bv2 = new BitVector32(ndef);

    int nr2 = bv2[nr_s];

    y2 = bv2[y_s];

    int sm2 = bv2[sm_s];

    ds2 = bv2[d_s];

    ms2 = bv2[m_s];

    int rs2 = bv2[r_s];
    }

}

Или все же придется ставить еще одну проверку, как я написал выше ?
Помогите пожалуйста разобраться.

  • Ошибка времени выполнения функция eof не может быть вызвана для текстового файла открытого на запись
  • Ошибка времени выполнения файл не открыт на запись паскаль
  • Ошибка времени выполнения файл не открыт на запись pascal
  • Ошибка времени выполнения файл не найден pascal
  • Ошибка времени выполнения ссылка на объект не указывает на экземпляр объекта паскаль