![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
NetJunky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 11.5.2008 Где: Tallinn Репутация: нет Всего: 0 |
Всем доброго времени суток.
Возможно тема и не очень разумна, но ничего не найдя по моему вопросу пришлось спрашивать тут. Думаю сложного в этом ничего нету, но у меня немного проблемно. Подскажите пожалуйста, как можно считать строку из файла, если я не знаю размера строки. Тоесть может быть, как мега большая, так и вообще пустая. Заранее всем спасибо. -------------------- Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139 Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев. |
|||
|
||||
bourne |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 12.7.2009 Репутация: нет Всего: нет |
fgetc() должна помочь
|
|||
|
||||
NetJunky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 11.5.2008 Где: Tallinn Репутация: нет Всего: 0 |
Тоесть варианта, как разом считывать строку нету? Только по символьно?
-------------------- Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139 Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев. |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
zloyshprot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.1.2008 Репутация: нет Всего: нет |
Я позволю себе влезть в данную тему, потому как вопрос мой связан с ней =)
Есть код, по вытаскиванию строчек из файла:
Собственно вопрос в том, что каждая строка считывается с переносом на следующую строку. т.е. вывод: File opened 1bla.txt 2bla.txt 3bla.txt 4bla.txt Press any key... Есть варианты, чтобы не было переносов на новую строку? А то мне надо дальше удалять файлы из списка, а я получаю Invalid argument и удаляется только самый последний файл из списка. |
|||
|
||||
bourne |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 12.7.2009 Репутация: нет Всего: нет |
Она ж принимает в качестве аргумента количество символов... Можно конечно указать 1000000 ![]()
Ну если ты не знаешь какая длина у строки, то имхо только посимвольно, т.к. надо "поймать" конец строки... Добавлено через 3 минуты и 9 секунд
С каким переносом? |
||||
|
|||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
не обратил на это внимание. тогда fgetc ![]() |
|||
|
||||
NetJunky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 11.5.2008 Где: Tallinn Репутация: нет Всего: 0 |
zloyshprot, тебе надо fgetc. Так как тогда ты можешь каждый считываемый символ проверять на \n и если так, то делать запись за место \n на \0 и переходить на следующую строку.
Вопрос такой. Если у меня массив вышел, который из трёх ячеек [1][3][\0]. Можно ли как-то верно перевести его в int или может есть какой-то алгоритм, как можно считать в int так чтобы получилось такое число? П.С. 13 привёл, как пример, может быть и любое другое. -------------------- Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139 Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев. |
|||
|
||||
ller |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.8.2008 Где: г. Таганрог Репутация: 2 Всего: 4 |
||||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Не сходите с ума, к черту посимвольное чтение. Читайте буферами и ищите в нем перенос строки.
Также в GNU еще есть специальное расширение: man getline. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Надо замэпить файл в память и искать строки в ней (с помощью memcmp например)
|
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
xvr предложил наилучший способ. Вечно я про него забываю.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
NetJunky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 11.5.2008 Где: Tallinn Репутация: нет Всего: 0 |
xvr, djamshud, я так понимаю, что Ваши советы были уже не на млй вопрос)
-------------------- Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139 Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев. |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
NetJunky, нет, на ваш:). Только это советы не в духе "вызвать такую-то функцию", а впринципе, как делать. Код получится более громоздким, но куда более эффективным.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
NetJunky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 11.5.2008 Где: Tallinn Репутация: нет Всего: 0 |
djamshud, просто memcmp ещё я могу понять, а вот getline() если я не ошибаюсь используется только начиная с С++, а значит уже изначально не подходила. Так как спрашивал именно про Си, но всёравно спасибо.
Просто далее был вопрос от человека у котого пример на С++, вот и решил, что ответ уже ему адресуются. -------------------- Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139 Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев. |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Это сишная функция, но, как я писал, ГНУтое расширение, т.е. не кроссплатформенно. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
Powerhead77 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.1.2010 Репутация: нет Всего: нет |
Видимо не в тему. Считываем строку в буфер char str[]. Далее определяем длинну считанной строки и обрабатываем как нам надо. Модератор: не забываем пользоваться кнопочкой "Код" Это сообщение отредактировал(а) bsa - 10.1.2010, 17:07 |
|||
|
||||
NetJunky |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 11.5.2008 Где: Tallinn Репутация: нет Всего: 0 |
Powerhead77, табуляцию можно было вроде сделать через \t.
Вопрос такого характера вроде всё по этойже тематике. Если всёже не пользовать getline, а посимвольное считывание. Вот например. Имею файл, в нём матрица определённого размера. Между каждым значением ячейки матрицы, в файле может быть один или более пробелов.
Но данный вариант никак не получается из-за того, что чтобы atoi грамотно перевёл, после каждого значения должен стоять знак конца строки '\0'. Пример матрицы:
Возможно в данном примере нету таких мест, где более одного пробела, но такое надо рассматривать. Есть ли у кого-то предложения, как данное содержимое грамотно считать в двумерный динамический массив для которого память на этом этапе уже выдана? Выше, код того, как я пытался. Это сообщение отредактировал(а) NetJunky - 10.1.2010, 19:37 -------------------- Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139 Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев. |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
а почему нельзя воспользоваться scanf/fscanf/sscanf со спецификатором %d"?
|
|||
|
||||
Dayx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 29.10.2009 Репутация: нет Всего: нет |
Много лет назад столкнулся с проблемой чтения разных строк.
Ну и создал себе такую маленькую функцию. С тех пор горя не знаю...
Конечно, надо еще проверять удачность выполнения malloc и realloc. Но это уж каждый делает по своему вкусу... |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Велосипедисты, блин. Тогда уж так:
|
|||
|
||||
Dayx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 29.10.2009 Репутация: нет Всего: нет |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
мне вообще непонятно, почему использовался goto вместо цикла (for или do/while)? Не слышал, что новичкам goto строго противопоказан?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |