Как пропустить строку при чтении файла?
Как пропустить строку при считывании из файла?
Подскажите, плз, как пропустить строку при считывании данных из текстового файла. Имеется файл.
Как отступить символ при чтении файла? Как перейти на следующую строку?
использую библиотеку fstream. у меня два вопроса: первый: как отступить символ при чтении из.
Пропустить при чтении каждое третье число
Нужно было написать программу, основанную на умении работать с текстовыми документами через с++, я.
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
shuraros1, здравствуйте! Вот, немного подправил ваш код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#include #include #include using namespace std; int main() { ifstream fin("input.txt"); char c[8][50]; double value; fin >> value; fin.ignore(); int i = 0; while (fin.getline(c[i], 50)) { if (i % 2 == 0) cout c[i] "\n"; ++i; } fin.close(); return 0; }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Как при открытии файла пропустить первую строку и начать считывание со второй строки?
Как при открытии файла пропустить первую строку и начать считывание со второй строки?
Переход на новую строку при чтении текстового файла
Здравствуйте! При чтении файла при помощи ReadLine не могу найти способ перейти на новую строку.
При чтении и выводе содержимого файла, переносы на новую строку не выводяться
Я пишу в textarea. Затем он через форму (методом POST) отправляеться и сохраняеться в файл. Через.
Как при чтении файла проверить достигнут ли конец файла?
Как при чтении файла проверить достигнут ли конец файла? Dim Red As IO.BinaryReader Red = New.
Как начать чтение файла с определенной строки?
Задача следующая:
Есть файл, длина строк в нем разная. Какая-то строка может быть 10 байт, какая-то 100, какая-то 500. Каким образом начать чтение файла с начала той или иной строки, при этом не читая весь файл?
Напрашивается решение:
Сделать фиксированную длину каждой строки, допустим 500байт. Таким образом, зная размер файла, мы можем с легкостью вычеслить на каком байте находится нужная строка и переместить на нужный байт указатель и начать чтение. Но, таким образом, размер файла существенно увеличится + есть вероятность что в выделенный лимит не все строки влезут.
Какие еще варианты?
- Вопрос задан более трёх лет назад
- 2988 просмотров
Комментировать
Решения вопроса 3
пофиг на чем писать
Вы не указали яп. В C# это решается одной строкой кода
File.ReadLines(pathToTextFile) .SkipWhile(line => !line.Contains("word")) // пропустит строки по условию .Skip(count) // сколько строк пропустить надо .TakeWhile(line => line.Contains("word")) // берет строки по условию .Take(count) // сколько строк взять надо
А так, не зная длины строк, как Вы будете смещение делать? Поэтому, кроме предложенного Вами варианта, вариантов и нет) Всякие метки, хеши и индексы я не учитываю, Вы же не хотите размер файла увеличивать.
Ответ написан более трёх лет назад
Нравится 3 2 комментария
Shaks @shaks Автор вопроса
ЯП не имеет значения на самом деле.
.SkipWhile(line => !line.Contains("word")) // пропустит строки по условию
— чтоб их пропустить, их нужно прочитать, значит уже не подходит.
Shaks, не совсем. Есть вариант ReadLineAll, вот он сразу весь файл в массив строк вернет. Этот же вариант вернет итератор, а не сам файл, он из потока возьмет ровно то, что будет в линк запросе, он спецом предназначен как раз для выборки строк из файла. И все варианты я указал для полноты, а так то Вам надо взять конкретную строку.
покоряю пик Балмера
никак. прочитать и посчитать переводы строк
вру. можно еще сделать индекс.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Saboteur @saboteur_kiev Куратор тега Программирование
software engineer
1. Ваш вариант вполне подойдет — делаете строки одинаковой длины и перемещаетесь на нужное смещение.
2. Делаете еще один файл, в котором указываете номер строки и позицию в файле. Называется индексирование, и пользуетесь им. Естественно этот еще один файл гораздо меньше.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 2
evgeniy_lm @evgeniy_lm
В общем только читать каждую строку и пропускать ненужные строки. В разных языках должны быть разные реализации подобной задачи на Delphi можно воспользоватся классом TStringList.
PS Использование строк одинаковой или индексов плохая идея (я бы сказал идиотская с уклоном в сторону говнокода)
Ответ написан более трёх лет назад
Shaks @shaks Автор вопроса
ну тут я с вами не согласен. все зависит от контекста той или иной задачи.
evgeniy_lm @evgeniy_lm
Shaks, Ну если речь идет о БД с внешними индексами то да, если в контексте банального текстового файла то это бред. Тот же TStringList сам автоматом создаст индексы которые не нужно контролировать программно, все необходимое для обеспечения целостности содержится в описании класса, ко всему прочему они будут находится в памяти и работать существенно быстрее чем чтение индексов из файла
evgeniy_lm, так получается Вы называете говнокодом внутреннюю реализацию TStringList. Потому что если ее нет в других языках, то что-то подобное надо будет реализовывать руками.
evgeniy_lm @evgeniy_lm
eRKa, Про говнокод я не написал не слово. Я писал про лишние телодвижения. Ко всему прочему аналоги TStringList есть во всех уважающих себя языках. Ваш пример из С# это не совсем полный аналог, но тоже работает
Запись и считывание символов и строк. Часть 1
Доброго времени суток! Сегодня мы поговорим о строках и символах в Си, и о том, как они передаются в файл. Сначала немного теории. До этого момента мы уже разбирали, как передавать переменную на вывод с помощью спецификаторов формата (%d, %c и т.д.). А также рассматривали различные методы открытия файлов для записи и чтения. Теперь давайте обобщим все варианты открытия файла и, что значит каждое обозначение.
Режимы чтения и записи файлов
В Си, для открытия файла, используется команда fopen(), в аргументах которого записывается имя файла и обозначение режима записи: r (r+) — файл открывается для чтения (чтения и записи); w (w+) — открывается пустой файл для записи (чтения и записи). Если файл с таким именем существует, он стирается; a (а+) — файл открывается для дополнения в конец (чтения и дополнения). Как пример: file = fopen(«file.tx) .
Спецификаторы
Повторим основную часть для функции scanf():
%c Читает одиночные символы
%d Читает десятичное число
%f Читает число с плавающей запятой
%s Читает строку Другие функции считывания разберём уже на примерах.
Задачи на запись и считывание строк и символов в Си
Теперь, когда мы всё обобщили приступим к задачам на символы и строки.
Записать в текстовый файл на разных строках 5 слов и 3 числа, закрыть его, а потом дописать туда еще 2 символа. Данная несложная задача проверяет нас на знание тех самых режимов открытия файлов, о которых мы говорили ранее.
#include #include int main(void) FILE*file; file = fopen(«file.txt»,»w+»); char str[200]; int ch1, ch2, ch3; gets(str); scanf(«%d%d%d», & ch1,& ch2,& ch3);
Для работы со строками в Си предусмотрены разнообразные библиотеки с различными функциями. В стандартной библиотеке список таких функций скромен, но в большинстве случаев этого достаточно. gets() аналог функции scanf(), однако, работает он только со строкой. Записывает в указанный аргумент сканируемую им строку из консоли ввода в формате символов. На самом деле и обычные строки следует воспринимать как обычные одномерные массивы с форматом char. Также следует учесть, что размер массива (у нас char str[200]) должен быть не меньше чем строка, а лучше больше.
fputs(str, file); fprintf(file,"\n%d, %d, %d", ch1,ch2,ch3); fclose(file);
Произведена запись в файл считанных с консоли строки и цифр. И закрыли файл. ВСЕГДА закрывайте файл после открытия. иначе это может повлиять на работоспособность вашего компьютера.
file = fopen("file.txt","a+"); char sym1 = 'R', sym2 = 'T'; fprintf(file, " \n %c , %c ", sym1, sym2); fclose(file); return EXIT_SUCCESS; >
Идём по заданию и снова открываем файл. Обращаю внимание на режим открытия файла («a+»), записываем туда 2 символа. И закрываем файл. Создать вручную англоязычный текстовый файл небольшого объема. Прочитать файл посимвольно и вывести на экран все символы из файла. Пропустив строку, вывести на экран первую и последнюю букву каждой строки в файле. Так как предстоит более сложная работа со строками, сразу подключим библиотеку string.h
#include stdio.h> #include stdlib.h> #include string.h> #define N 200 int main(void) int i = 0; FILE*file; file = fopen("file.txt", "r"); char sym[N], c = 0; while( (c = fgetc(file)) != EOF) printf("%c", c); >
После открытия файла в режиме чтения и инициализации переменных, идёт код, который пригодится вам в будущем. Вывод на экран файла посимвольно! В условии к while указано «пока сканированный символ не означает конец файла». EOF — символ известный в С++ как «\0», означает конец файла.
fclose(file); printf("\n"); file = fopen("file.txt", "r"); while( !feof(file)) fscanf(file,"%s",sym); i = (strlen(sym)); printf("%c %c ", sym[0], sym[i-1]); > fclose(file); return EXIT_SUCCESS; >
Условие, используемое при while, такое же как и в предыдущей статье, однако имеет более короткую форму. Функция strlen() из библиотеки string.h позволяет определить длину строки. И представив, что строка — одномерный массив, обратимся к конкретным символам через индекс. Создать вручную англоязычный текстовый файл небольшого объема. Найти, сколько всего гласных содержится в этом файле. Найти количество гласных в каждой строке файла. Результаты дописать в этот же файл на новой строке.
#include stdio.h> #include stdlib.h> #include string.h> #define N 100 int main(void) int vse = 0, i = 0, k = 0; FILE*file; file = fopen("file.txt", "r"); char c = 0, temp[N]; while( (c = fgetc(file)) != EOF) if ((c == 'A') || (c == 'a') || (c == 'E') || (c == 'e') || (c == 'I') || (c == 'i') || (c == 'O') || (c == 'o') || (c== 'Q') || (c == 'q') || (c == 'U') || (c == 'u') || (c == 'Y') || (c == 'y')) vse++; > fclose(file);
Перво-наперво, посчитаем количество гласных во всём файле с помощью счётчика vse.
file = fopen("file.txt", "r"); k = 0; while (!feof(file)) fgets(temp, N, file); k++; > fclose(file);
Теперь посчитаем количество строк, чтобы создать одномерный массив с количеством элементов равным количеству строк.
file = fopen("file.txt", "r"); int * kol; int j; kol = (int*)malloc(k * sizeof(int)); for (j = 0; j k; j++) kol[j] = 0; fgets(temp, N ,file); for (i = 0; i (strlen(temp)); i++) if ((temp[i] == 'A') || (temp[i] == 'a') || (temp[i] == 'E') || (temp[i] == 'e') || (temp[i] == 'I') || (temp[i] == 'i') || (temp[i] == 'O') || (temp[i] == 'o') || (temp[i] == 'Q') || (temp[i] == 'q') || (temp[i] == 'U') || (temp[i] == 'u') || (temp[i] == 'Y') || (temp[i] == 'y')) kol[j]++; > > fclose(file);
Не пугайтесь, друзья! Для создания массива, размер которого содержится в переменной, используется команда (int*)malloc(k * sizeof(int)); . Грубо говоря, мы создали динамический массив в Си. В цикле, сканируя по строке с помощью fgets() (где temp — переменная куда записать строку, N — количество символов, file — название файла с которым работаем), находим в строке гласные буквы. В конце записываем значение счётчика в наш массив.
file = fopen("file.txt", "a+"); fprintf(file,"\n"); for (j = 0; j k; j++) fprintf(file,"%d ", kol[j]); > fprintf(file,"\t vse %d", vse); fclose(file); free(kol); return EXIT_SUCCESS; >
Теперь просто записываем требующиеся по заданию показания счётчиков в конец файла. Как и в случае закрытия файлов, так и при работе с malloc ВСЕГДА освобождайте память в конце программы с помощью команды free() , где в аргументах имя переменной. На сегодня всё, если остались вопросы, пишите в комментариях. Вот исходники: Все исходники без файлов txt.
Скачать исходники задачи — 1
Скачать исходники задачи — 2
Скачать исходники задачи — 3
Поделиться ссылкой:
Пропустить строчку при чтении из файла
Как пропустить строку при чтении файла?
#include "pch.h" #include <iostream> #include <fstream> #include <string> using namespace std;.
Пропустить при чтении каждое третье число
Нужно было написать программу, основанную на умении работать с текстовыми документами через с++, я.
«Нарушение прав доступа при чтении по адресу» при чтении структур из бинарного файла
Пытаюсь разобраться со структурами в бинарных файлах. Допустим, есть массив структур. Записываю.
Как пропустить строку при считывании из файла?
Подскажите, плз, как пропустить строку при считывании данных из текстового файла. Имеется файл.
Регистрация: 04.07.2013
Сообщений: 282
целую строчку?)
Регистрация: 16.12.2012
Сообщений: 29
Да, целую.
И читать со следующей
8864 / 6641 / 907
Регистрация: 14.02.2011
Сообщений: 23,372
строка первая?
размер строки знаешь?
можно сдвинуть указатель чтения функцией fseek
http://cpp.com.ru/shildt_spr_po_c/13/fseek.html
но проще по моему прочитать и необрабатывать
Регистрация: 16.12.2012
Сообщений: 29
Строка не первая..
Возможно я не совсем верно изъяснился. Строка имеется в виду в файле.. и она пустая. Или поток ее сам пропустит?
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
Если бинарный
Сообщение от ValeryS
можно сдвинуть указатель чтения функцией fseek
Если текстовый режим файла
Сообщение от ValeryS
но проще по моему прочитать и необрабатывать
Если файл небольшой то легче считать его полностью построчно в память ( например в std::vector
5496 / 4891 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
Сообщение от MikeB
Строка не первая..
Возможно я не совсем верно изъяснился. Строка имеется в виду в файле.. и она пустая. Или поток ее сам пропустит?
Зачем пропускать? Строчки не просто так читаются, с ними что-то после этого делается. Например, выводятся на экран, записываются в другой файл и т.п. Поэтому проще просто считать, и если считанная строка соответствует какому-нибудь условию (например, пустая), то не выполнять с нею дальнейших действий, т.е. пропустить не строчку, а дальнейшее действие с ней.
Добавлено через 4 минуты
Сообщение от MikeB
и она пустая. Или поток ее сам пропустит?
Пустая строка в файле — это условное название. В ней всегда что-то есть (например ‘\n’), поэтому поток её сам не пропустит.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Пропустить адрес при перезаписи из одного файла в другого
Итак, как пропустить определенный адрес? Например вот этот вот 58ff6ff7(см. Скриншот). Он.
Пропустить\не пропустить при слиянии
Здравствуйте! Такое дело: выполняю слияние двух документов. Все вроде бы хорошо, да вот только.
Записать в конец файла строчку, из начала файла стереть строчку
Как из начала файла удалить первую строчку и в конец файла записать другую строчку, чтобы.
Как при чтении файла проверить достигнут ли конец файла?
Как при чтении файла проверить достигнут ли конец файла? Dim Red As IO.BinaryReader Red = New.
Можно ли при чтении из файла элементов в список удалять эти элементы(без очистки файла)
Допустим,есть файл,в нём записаны 3 обьекта(отличаются одним параметром,по которому как раз и.
Как при открытии файла пропустить первую строку и начать считывание со второй строки?
Как при открытии файла пропустить первую строку и начать считывание со второй строки?