0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 8
1

Посимвольное считывание из файла.

25.05.2012, 01:16. Показов 7613. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как по символьно считывать данные из файла?

Добавлено через 32 минуты
или это сделать не возможно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2012, 01:16
Ответы с готовыми решениями:

Посимвольное считывание файла
Почему вместе с символами, записанными в файле, считываются какие-то еще? int i=0,n,sum; char*...

Посимвольное считывание из файла
Сообствено, задание: посимвольно считать данные из файла f и записать их также посимвольно в файл...

Посимвольное считывание файла
Есть файл в котором находится несколько строк последовательностей нулей и единиц. 10101010101...

Посимвольное считывание файла
Как считать файл посимвольно? Файл состоит из 1-й строки и включает в себя цифры разделённые...

19
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
25.05.2012, 02:04 2
Есть разные вырианты. Смотря зачем тебе это нужно и какой файл.
1
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 8
25.05.2012, 02:14  [ТС] 3
ну мне нужно считать символ и проверит не является ли он переходом на новую строчку
0
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
25.05.2012, 02:23 4
Если работаешь с текстовым файлом это можно проверить EOln(f) - проверка признака конца строки.
Delphi
1
2
3
If EOLn(f) Then 
//Конец строки
ReadLn(f); //А это будет переход на следующую строку
1
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 9
28.04.2013, 09:07 5
в эту же топку вопрос мне нужно организовать посимвольное чтение данных в моем случае это двумерный массив чисел разделенных пробелами соответсвенно и энтер между строками
0 0 1 2
0 1 2 0
1 2 0 0
2 0 0 0 нужно что бы читалось посимвольно и заносилось в переменные
0
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
28.04.2013, 10:00 6
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Var
  f : TextFile;
  Arr : Array[1..100,1..100] Of Byte;
 
procedure TForm1.Button1Click(Sender: TObject);
Var
  i,j : Integer;
  c : Char;
begin
  AssignFile(f,'Input.txt');
  Reset(f);
  i:=1; j:=1;
  While Not Eof(f) Do
  Begin
    If EoLn(f) Then
    Begin
      ReadLn(f); //Пропускаем признак конца строки
      Inc(i);
      j:=1;
      Continue;
    End;
    Read(f,c);
    If c In ['0'..'9'] Then
    Begin
      Arr[i,j]:=Ord(c)-Ord('0');
      Inc(j);
    End;
  End;
  CloseFile(f);
end;
Только для однозначных чисел.
0
angstrom
28.04.2013, 11:52 7
ReadLn ведь сам может всё сделать
Delphi
1
2
3
4
5
var
  arr : array[Char] of Integer;
...
  ReadLn(f, Arr[0], Arr[1], Arr[2], Arr[3]);
...
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
28.04.2013, 11:54 8
angstrom: Это если знаешь размерность массива.
0
angstrom
28.04.2013, 12:04 9
Чаще всего так и бывает.
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 9
29.04.2013, 17:12 10
а у меня не все числа однозначные там или чар или стринг надо только я вообще не знаю как
0
angstrom
29.04.2013, 17:13 11
Разговор был о количестве данных в строке.
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
29.04.2013, 17:25 12
mjsd: У тебя количество данных в строке известно? Сколько столбцов в матрице?

Не по теме:

Чтобы увидеть ответ - обновляй страницу.

0
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 9
30.04.2013, 16:10 13
Цитата Сообщение от Одиночка Посмотреть сообщение
mjsd: У тебя количество данных в строке известно? Сколько столбцов в матрице?

Не по теме:

Чтобы увидеть ответ - обновляй страницу.

в начале файла прописанны 4 переменые
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
6m n 5
5a b 5
 0 0 0 0 0 0
 0 0 0 0 0 0
 0 0 0 0 0 0
 0 0 0 0 0 0
 1 1 1 1 1 0
 
 0 0 0 0 1
 0 0 0 0 1
 0 0 0 0 1
 0 0 0 0 1
 0 0 0 0 1
0
angstrom
30.04.2013, 16:14 14
Цитата Сообщение от mjsd Посмотреть сообщение
4 переменые
А видно 6.
Так как размерность строк различна (после первых двух), то используй вариант от Одиночки.
Первые 2 строки можно считать через ReadLn.
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 9
30.04.2013, 16:39 15
Цитата Сообщение от angstrom Посмотреть сообщение
А видно 6.
Так как размерность строк различна (после первых двух), то используй вариант от Одиночки.
Первые 2 строки можно считать через ReadLn.
в первых 2 строчках описываются 4 переменные определяющие длину ширину массива и ниже сами числа массивов код нашел помогите разобраться
мне необходимо понять посимвольлное чтение

исходник"procedure TForm4.LoadLevel(Number: Integer);
var LevelName, s : String;
sl : TStringList;
i : integer;
j: Integer;
begin
if Number >= maxlev then Exit;
LevelName := 'lev'+IntToStr(Number)+'.txt';
sl := TStringList.Create;
try
sl.LoadFromFile(LevelName);
except
ShowMessage('Cannot load level file '''+LevelName+'''!');
Exit;
end;
for i := 0 to 8 do begin
s := sl[i];
for j := 1 to 9 do
if s[j] <> '#' then begin
fields[j-1,i].InLevel := true;
fields[j-1,i].Placed := StrToInt(s[j]);
end else begin
fields[j-1,i].InLevel := false; //Поле можно изменять
fields[j-1,i].Placed := -1; //Пустая клетка
end;
end;
Draw;
end;"



что примерно получается еще в программе не проверял(фрагмент)"
procedure TForm4.LoadLevel(Number: Integer);
var

LevelName, s : String;


i,j : integer;
begin

LevelName := opendialog1.;--------------------------
try

if s[i] <> ' ' then begin
while s[i+1]<>' ' then
begin
m:=m*10+strtoint(s[i]);
i:=i+1;
end;
i:=i+1;
while s[i+1]<>' ' then
begin
n:=n*10+strtoint(s[i]);
i:=i+1;
end;
i:=i+1;(2)

while s[i+1]<>' ' then
begin
a:=a*10+strtoint(s[i]);
i:=i+1;
end;
i:=i+1;
while s[i+1]<>' ' then
begin
b:=b*10+strtoint(s[i]);
i:=i+1;
end;
i:=i+1;(2)


for i:= 0 to m do begin
for j:= 0 to a do begin
if s[i] <> ' ' then
stringgrid2.cells[i,j]:=strtoint(s[i]) ;
end;
end;



for i:= 0 to b do begin
for j:= 0 to n do begin
if s[i] <> ' ' then
stringgrid3.cells[i,j]:=strtoint(s[i]) ;
end;
end;


for i:= 0 to m do begin
for j:= 0 to n do begin
if s[i] <> ' ' then
begin
if s[i] = '1' then paintbox1.canvas.rectangle();
if s[i] = '2' then paintbox1.canvas.rectangle();
end;

end;
end;
"
0
angstrom
30.04.2013, 16:46 16
Цитата Сообщение от mjsd Посмотреть сообщение
Delphi
1
2
6m n 5
5a b 5
Видно что 6х5 и 5х5, а с буквами что делать?
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 9
30.04.2013, 16:48 17
Цитата Сообщение от angstrom Посмотреть сообщение
Видно что 6х5 и 5х5, а с буквами что делать?
m n a b переменные в которых они храняться выносил во время редактирования
t:=t+inttostr(m+1)+'m n '+inttostr(n+1);
0
angstrom
30.04.2013, 16:49 18
Если ты сам создавал этот файл, то создан он, скажем так, - неудачно.
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
30.04.2013, 17:53 19
Если тебе нужно 2 массива такого типа считать: убери эти символы из строк, в которых задаются размерности массивов. Если тебе не нужна морока чтобы их потом удалять из строки при чтении? Потом можно записать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Type
  MyArr = Array[1..6,1..6] Of Byte;
Var
  m,n,a,b : Integer;
  f : TextFile;
  Arr1,Arr2 : MyArr;
 
//Процедура чтения двумерного массива из файла f
procedure LoadArr(Var Arr:MyArr;m,n:Integer); //m,n - размерность массива
Var
  i,j : Integer;
  c : Char;
Begin
  i:=1; j:=1;
  While Not Eof(f) Do
  Begin
    If EoLn(f) Then
    Begin
      ReadLn(f); //Пропускаем признак конца строки
      Inc(i);
      j:=1;
      Continue;
    End;
    Read(f,c);
    If c In ['0'..'9'] Then
    Begin
      Arr[i,j]:=Ord(c)-Ord('0');
      Inc(j);
    End;
  End;
End;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  AssignFile(f,'Input.txt');
  Reset(f);
  ReadLn(f,m,n);
  ReadLn(f,a,b);
  LoadArr(Arr1,m,n); //Считаем первый массив
  ReadLn(f); //Пропустим пустую строку
  LoadArr(Arr2,a,b); //Считаем второй массив
 
  CloseFile(f);
end;
А тот код из какой-то другой оперы и вряд-ли тебе поможет.
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 6
16.02.2014, 10:59 20
народ, а подскажите как посимвольно считать текст, тоесть у меня дано например стихотворение ммне нужно считать строчку разбить её посимвольно переставить всё в нужном порядке и вставить в другой файл (как вставлять я знаю), только вот как разбить строчку по символам и потом взять следующую строку?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2014, 10:59
Помогаю со студенческими работами здесь

Посимвольное считывание из файла
Нужно считать данные из файла посимвольно, при этом не все подряд, а, например из 1й строчки с 5...

Посимвольное считывание из файла
Добрый вечер уважаемые формучане. Помогите найти ошибку в коде программы, реализующей алгоритм...

Посимвольное считывание из файла
Суть задачи в следующем: В одном файле имеется 5 целых чисел, в другой файл нужно записать сумму...

Посимвольное считывание с файла не работает
Проблема решена заменой на while (!feof(analyzedFile)) { ch = fgetc(analyzedFile); ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru