yagami_md Ответов: 1

Как я могу вычислить количество байтов каждой строки в файле?


Привет, друзья ..
У меня есть файл, содержащий номер строки ..
Мой вопрос в том, как я могу использовать функцию fgets на языке Си или другую функцию, может быть, вы знаете ..
Я хочу вычислить количество байтов каждой строки в другом файле
Этот пример
Прочитайте строку за строкой файл1, тогда мой файл2 будет :
234: количество байтов строки 1
321: число байт ...
...
Спасибо за вашу помощь

Что я уже пробовал:

Файл1 = с помощью функции fopen (`настройку fl1`,`РБ`);
File2 = open (fl2,wb);
Int line [128];
Int x ;
Int number=0;
While ( fgets ( line, size of line, file1)
{
Sscanf ( line, & x );
}
Number_line ++;

Rick York

Несколько заметок о том, что вы пробовали :
- вызов fopen принимает имя файла (строку) и режим (строку).
- Вы читаете и пишете текстовые файлы, поэтому строки режима fopen должны быть "r" и " w " соответственно. Вы не хотите, чтобы " b " в строках, потому что это означает двоичный режим.
- Нет необходимости использовать sscanf в вашем цикле. Вы хотите подсчитать количество символов в строке, так что strlen-хороший кандидат для этого.
- Попробуйте fprintf для записи количества байтов.

jeron1

Обратите внимание, что регистр важен в языке Си.
например,

Int x;

это приведет к синтаксической ошибке.

yagami_md

Как я могу использовать strlen для определения количества байтов в строке?

Rick York

Прочтите документацию по strlen. Он сделает всю работу за вас.

Если вы не можете понять этого, то посчитайте символы сами. Сначала прочтите документы на fgets, чтобы точно знать, что он возвращает.

Затем продолжайте пробовать, пока не получите это, и это единственный способ действительно научиться. Вы ничему не научитесь, если мы просто скажем вам, что делать.

yagami_md

Пожалуйста вы можете мне помочь
Я хочу использовать fgets и strlen +
Пожалуйста

Rick York

Я считаю, что лучший способ изучить этот материал - это то, что я сделал : прочитайте документы, прочитайте пример кода функций и попробуйте сами. Я не собираюсь писать это для тебя. Вы должны сами в этом разобраться. Это также дает вам возможность изучить самый ценный инструмент, который у вас есть: отладчик.

1 Ответов

Рейтинг:
12

OriginalGriff

Есть два пути:
1) прочитайте каждую строку с помощью fgets и запишите ее длину. Это тривиально - это стандартная строка с нулевым окончанием, поэтому подсчитайте символы до нуля, и вы сможете ее распечатать.
2) считайте весь файл в память и сканируйте его. Для каждой строки держите счетчик количества символов и ищите код новой строки (в зависимости от вашей системы это может быть '\r', '\n' или '\r', за которым следует '\n'). Когда вы найдете его, выведите количество символов и сбросьте счетчик.

Ни то, ни другое не особенно сложно, это просто вопрос личных предпочтений.
Но... это ваше домашнее задание, так что код полностью зависит от вас!


yagami_md

Чар с ;
Количество чисел=0;
While (c=fgetc( файл 1))! = EOF)
{
Если (c== ' \n`)
{
Fprintf ( файл 2,`%d "\n", количество номеров);
Количество Чисел++;
}
Ещё
Количество чисел++;
}

Я пробовал это сделать, но в файле я вижу только один номер в строке
3
5
7
В чем проблема?

jeron1

Как он может что-то сделать? он не компилируется.

OriginalGriff

Что ж... посмотрите на свое состояние.
Он не собирается компилироваться-отчасти потому, что у него есть верхний регистр, но C чувствителен к регистру, отчасти потому, что у него больше')', чем '(' - и это действительно зависит от того, как выглядел код, который вы на самом деле запустили!

yagami_md

Я поправил его .. теперь он компилируется, но на самом деле не дает мне правильного решения

CPallini

5.

jeron1

Затем вы должны опубликовать его вместе с объяснением того, что он делает по сравнению с тем, что вы ожидаете от него. Вы знакомы с отладчиками?