Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение из файла, нужна небольшая помощь 
:(
    Опции темы
PunkRat
Дата 20.1.2003, 01:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите пожалуйста, кому не ленm :) В общем всё просто. Есть текстовый файл, в кототором записаны ЧИСЛА. Так вот мне нужно прочитать эти числа и записать их значения в массив целых чисел. У меня, в лучшем случае, получается прочесть лишь коды символов. Подскажите что-нибудь действующее плиз
  Вверх
Kefir
Дата 20.1.2003, 02:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ну, если числа через пробелы, то:

fstream file;
int numb[100];
file.open("file.txt", ios::in);
for(int a=0; a< /*кол-во чисел*/ ; a++)
{
  file>>numb[a];
}

если же у тебя определённый метод записи, то просто считываешь весь файл в, допустим, CString, а потом выбираешь оттуда числа.
  Вверх
PunkRat
Дата 20.1.2003, 02:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Guest @ 19.1.2003, 18:31)
ну, если числа через пробелы, то:

fstream file;
int numb[100];
file.open("file.txt", ios::in);
for(int a=0; a< /*кол-во чисел*/ ; a++)
{
  file>>numb[a];
}

если же у тебя определённый метод записи, то просто считываешь весь файл в, допустим, CString, а потом выбираешь оттуда числа.

Спасибо Кефир! :) Почти то что нужно. Только числа идут без всяких пробелов. Что то типа матрицы. Без пробелов как читать?
  Вверх
Nastya
Дата 20.1.2003, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



Так числа или цифры.
Если числа, то какие между ними будут разгранечители, как понять, где закончилась одно число, и началось другое


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Kefir
Дата 20.1.2003, 03:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











да уж, ты определись пожалуйста числа у тебя или цифры, если просто цифры, то считываешь весь файл в массив переменных, и тогда в каждом эл-те массива будет каждая цифра (ну, ещё с переходом на новую строку повозиться, но это уже мелочи)
  Вверх
Nastya
Дата 20.1.2003, 04:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



Так числа или цифры.
Если числа, то какие между ними будут разгранечители, как понять, где закончилась одно число, и началось другое?


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
HexoGenus
Дата 20.1.2003, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Угу правильно, но можно еще использовать числа с фиксированным количеством знаков с впередистоящими нулями...
(Хотя может он действительно путает числа и цифры)
если матрица то все строки скорее всего одинаковой длины и количество столбцов тоже одинаковое и это упрощает дело...
Как Kefir предложил используем класс основанный на String
Код

String strTemp;
InputQuery("Чтение матрицы", "Введите количество колонок в матрице:", strTemp);
TStringList * tsLoFile=new TStringList();
tsLoFile->LoadFromFile("c:\\1.txt");
int iRow=tsLoFile->Count; //Количество строк в матрице
int iCol=strTemp.ToIntDef(1); //Количество колонок в матрице
int iLen=tsLoFile->Strings[0].Length()/iCol; //Количество цифр в числе
ShowMessage(iLen);
int **x;
x = new int*[iRow];
for (int i = 0; i < iRow; i++) x[i] = new int[iCol];
for (int i = 0; i < iRow; i++) for (int j = 0; j < iCol; j++)
                                {
                                 strTemp=tsLoFile->Strings[i].SubString((j*iLen)+1, iLen);
                                 x[i][j] = strTemp.ToIntDef(1);
                                }
for (int i = 0; i < iRow; i++) for (int j = 0; j < iCol; j++)
                                {
                                 ShowMessage(String("Элемент х(")+(i+1)+","+(j+1)+")="+x[i][j]);
                                }

--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
HexoGenus
Дата 20.1.2003, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Кстати просьба к тем кто работал с многомерными массивами проверьте плиз правильно ли я объявляю границы массива и подставляю индексы... а то справка билдера по new меня несколько смутила... то они под строки индекс j использовали то под столбцы...
руки бы им оторвать по самые уши... :D
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
билдерец
Дата 20.1.2003, 09:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











справка билдера-отдельная статья. Тем кто ее писал надо присвоить дворянство, чтобы они назывались деБилдеры!
  Вверх
Medved
Дата 20.1.2003, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Цитата(Guest @ 20.1.2003, 04:17)
справка билдера-отдельная статья. Тем кто ее писал надо присвоить дворянство, чтобы они назывались деБилдеры!

напиши что-нибудь лучше, тогда и говори так....


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Kefir
Дата 21.1.2003, 06:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











HexoGenus, если тебе нужна справка про new, то посмотри в MSDN, я более чем уверен что там про это есть. А если уж там плохо написано, то вряд ли кто лучше объяснит...
  Вверх
PunkRat
Дата 22.1.2003, 00:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо вам за ваши ответы! :) У меня действительно ЦИФРЫ, ничем не разделённые, просто каждый новый символ - отдельный элемент массива должен быть. Ну я решил что просто нужно читать из файла при помощи fgetc и конвертить это всё atoi пропуская все '\n'... вроде работает
  Вверх
simanyay
Дата 22.1.2003, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


Профиль
Группа: Участник
Сообщений: 2053
Регистрация: 22.8.2002

Репутация: нет
Всего: 36



А как же '\0'? Хоть он и в конце, но всё же существует


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
HexoGenus
Дата 22.1.2003, 04:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(Guest @ 20.1.2003, 22:55)
HexoGenus, если тебе нужна справка про new, то посмотри в MSDN, я более чем уверен что там про это есть. А если уж там плохо написано, то вряд ли кто лучше объяснит...

Хммм... да не справка по new мне нужна а простая практика с многомерными массивами ...
Не приходилось как то до этого динамически их создавать...
Для школьных задачек обычно их размер можно определить заранее, а в программах которые пишу как-то необходимости не было.. вот и попросил проверить Вас надеясь что вы с этим работали и с одного взгляда обнаружите возможную ошибку...
Код

int m = 3;
int n = 5;
// создаем двумерный массив в котором будет 3 строки и 5 колонок
int **data;

// Это наши 3 строки
data = new int*[m];

int *temp;
for (int i = 0; i < m; i++)
 {
  // а это мы в i-ую строку добавляем 5 колонок
  data[i]=temp= new int[n];
  // темп мы используем что бы занести значения
  // еще не разобравшись где строки а где столбцы
  // именно в выделенное им место...
  // а правильно использовать data[i][j]
  for (int j = 0; j < n; j++) temp[j]=i*j;
 }

  // ну и для проверки выводим массив чисел на экран...
  for (int i = 0; i < m; i++)
   {
    Memo1->Lines->Add("==> ");
    for (int j = 0; j < n; j++) Memo1->Lines->Strings[i]=Memo1->Lines->Strings[i]+data[i][j]+" , ";
   }
  // теперь я знаю что у массива data[i][j] i - это строка а j - это колонка
  // и командой data = new int*[m]; я добавляю в него строки
  // а командой data[i]= new int[n]; я добавляю в него столбцы...

Ну вот и я теперь не только могу динамически создавать многомерные массивы но и понимаю как это работает...  :)
Кстати проверил в предыдущем коде там все индексы раставлены правильно...
Жаль не пригодится...  :(
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
Vaulter
Дата 23.1.2003, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 2
Всего: 22



о господи!!!HexoGenus, да перейди ты наконец на std::vector
это куда удобнее, чем массив указателей.


--------------------
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0996 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.