![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| 2faust |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
здравтсвуйте.
я немного запутался и прошу вашей помощи. задача след., имеется содержимое в файле, я это содержимое читаю в массис массивов строк, а дальше для проверки, то что прочитал записываю в другой файл . и вот чтобы прочитать то что записал вызвает некоторую сложность как это все выглядет : содержимое файла, которое мне надо записать в массив массивов: [SATTYPE] 1=0130 2=Hot Bird 1/2/3/6/7A [DVB] 0=99 1=10719,V,27500,34; Cyfra + 2=10723,H,29900,34; British Telecom 3=10758,V,27500,34; TPS 4=10775,H,28000,34; AFN — American Forces Network ...
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
| 2faust |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
проблема заключается в том, что то что записа в 2D массив не могу вывести на распечатку, может поможете:
но для этого надо вьехать в код, иначе никак. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
2faust вьехать в этот код? Упаси боже ) притом что код даже не полный.
у тебя 24 переменных в коде, указатели, указатели на указатели..и.т.д..Может пора переходить на STL?
не думаешь что выглядет лучше? |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Еще как можно, если вы вкратце объясните, что у вас хранится в массивах и что конкретно не выводится. Мне, например, даже если въеду в код вполне может остаться непонятным условие: if(strcmp((char*)ppNeedStr[g][d],"0=99\n\0") == 0) (кстати, зачем завершающий 0?) Мне кажется, что вашу задачу можно попроще решить - уж больно мудрено массивы организовываются, файл несколько раз прогоняется (причем в общем виде неправильно - если попадется длинная строка, у вас могут возникнуть проблемы). Есть исходный файл, как я понял. Его нужно считать в массив массивов строк (это проще говоря разбить на несколько файлов, объединенных в массив). Вот у меня и возник вопрос: по какому признаку надо разбивать, чтобы затем записать и какими массивами вы это организовываете. Возвращаясь к приведенному кусочку кода: Почему-то я не увидел в функциях записи участия переменной цикла кроме как по условию else. Т.е. при выполнении условия всегда пишем одно и то же? Это ошибка или так нужно? |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
2 раза запостилось почему-то
Это сообщение отредактировал(а) Anikmar - 2.3.2009, 23:21 |
|||
|
||||
| 2faust |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
увы, иначе почему то у меня строки небыли равны. постараюсь разьеснить смысл, если это возможно. на входе имеем файл, в котором каждая строка значима, и в дальнейшем будет использоваться. когда прохожу строку "0=99", следующую строку надо разбивать на подстроки, и содержимое подстроки должно записываться в свой 2D массив. это удобно, потому как вдальнейшем будут извлекаться , наверное опять непонятно. пример: [DVB] 0=99 1=10719,V,27500,34; Cyfra + 2=10723,H,29900,34; British Telecom 3=10758,V,27500,34; TPS 4=10775,H,28000,34; AFN — American Forces Network /
и таких подстрок надо прочитать в других строках, вот поэтому для этого создал 2D массив. со все освтальным так же. после того как массив 2D заполним, для проверки хочу вывечти содержимое в файл, для проверки. |
||||
|
|||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
А вы не задумывались, что сделает программа, если в строке не окажется символа '=' ? Почему вы не пользуетесь строковыми функциями поиска подстрок, тем же STL, наконец (великолепная поборка алгоритмов)? |
|||
|
||||
| 2faust |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
до той строки, до которой дохожу операция '=' обязательно должна присутсвовать. почему не использовал STL - я еще не могу похвастаться своим богажем знания, поэтому использую старые но проверенный методы. буду вам благодарен, если предложите вариант, с тем что уже написано, мне бы только записать в 2Д-массив, и проверить что записалось. для этих операций выбрал указатели. |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
В том-то и дело, что я, например, не совсем понял что вы в массив хотите записать. Может озвучите все-таки задачу? Или военная тайна? У нас есть файл вида:
Дошли до строки 0=99 и следующие строки (до конца файла?) разбиваем на некие лексические единицы, которые мы должны записать в массивы? Т.е. строка 1=10719,V,27500,34; Cyfra + Должна записаться так: в 1-й массив 1 во 2-й 10719 в 3-й V в 4-й 27500 в 5-й 34 в 6-й Cyfra+ Правильно? Затем эти массивы в неком вашем внутреннем формате должны быть записаны в отдельный (отдельные) файл(лы)? |
||||
|
|||||
| 2faust |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
да , Вы правильно поняли.
можно просто записать просто в массивы, так что частоты(т.е. 10719) записываются в массив частот, поляризация(V) записывается в свой массив и .т.п. все эти данный должны быть в char'ах, т.е. '10719', 'V', и т.д.т.е. строки |
||||
|
|||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
А есть необходимость хранить эти данные в разных массивах? Не проще написать класс с соответствующими полями, а затем создать один единственный массив классов? |
|||
|
||||
| inside_pointer |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
"..." - строковой литерал (строковая константа, в смысле неменяемая и не входит в число констант языка) там в конце всегда нуль-символ невидимый, для того чтобы её длину можно было узнать strcmp дальше нуль-символа не пойдёт скобки экранировать не надо, количество экранированных символов зарезервировано
если прочитал из файла [DVB], то символ перевода строки надо от него отрезать, а потом сравнивать, либо применять strncmp(..., "[DVB]", 5); плохо то, что символ, который никак не относится к записи, участвует в обработке записи и полотно это представь, что через месяц будет ещё больше в два раза, ты в нём не поймёшь вообще ничего, даже то, что понимал раньше очень хорошо, а поменять его как-нибудь - тем более, придётся менять его всё или не менять ничего |
||||||
|
|||||||
| 2faust |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
согласен. заводить отдельный класс сейчас это проблематично, хотя вы и правы. попробую исправить то что уже написал. |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Если программа нужная и полезная, то лучше ее написать в удобном для сопровождения виде. Смотря сколько строк кода уже написано и какова на данный момент ее работоспособность. В противном случае код разрастется до неимоверных величин, вы сами в нем не разберетесь и все равно будете в итоге писать с нуля (так говорит мой опыт). Как только появляется необходимость добавить некоторый функционал в код, который написан хаотично и достаточно давно (когда уже не помнишь что и где писал), то трудоемкость разбора собственных же полетов иногда превышает трудоемкость написания новой версии. Я не говорю уже о случаях, когда свой код оставляешь по наследству. Правда в последнем случае может быть даже мрачное злорадное наслаждение. Добавлено через 4 минуты и 55 секунд С таким кодом можно долго провозиться. Например следующий участок:
В функциях вывода где-то есть переход на новую строку, где-то нет. Это правильно или нет? |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |