Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: cheops   (06.12.2011 в 21:51)
При разборе такого файла можно начать отталкиваться от следующей программы (при условии конечно, строго формата, для простоты большинство проверок опущены)
#include <stdio.h>
#include <io.h>
#include <iostream>
using namespace std;

// Прототипы функций
long filesize(FILE *pFile);
// Главная функция
int main()
{
  // Вспомогательные структуры и дескрипторы
  FILE * pFile;
  long i, k, chartotal, numbertotal = 0;
  // Открываем файл
  pFile = fopen ("crypt.txt""rb");
  if (pFile == NULL)
  {
    cerr << "Не удалось открыть файл" << endl;
    return 1;
  }

  // Определяем размер файла
  chartotal = filesize(pFile);
  // Резервируем строку под содержимое файла
  char *str = new char[chartotal];
  // Читаем содержимое файла
  long result = fread (str, 1, chartotal, pFile);
  if (result != chartotal)
  {
    cerr << "Не удалось прочитать файл" << endl;
    return 1;
  }
  // Закрываем файл
  fclose (pFile);
  // Подсчитываем количество целых чисел:
  // количество пробелов + 1
  for(i = 0; i < chartotal; i++)
  {
    if(str[i] == ' ') numbertotal++;
  }
  if(numbertotal) numbertotal++;

  // Выделяем память под массив чисел
  int *arr = new int[numbertotal];
  // Заполняем массив
  char test[80];
  int beg = 0, end = 0;
  for(i = 0, k = 0; i < chartotal; i++)
  {
    if(str[i] == ' ')
    {
      beg = end;
      end = i + 1;
      strncpy(test, str + beg, end - 1 - beg);
      test[end - 1 - beg] = '\0';
      arr[k++] = atoi(test);
    }
  }
  // Обрабатываем последнее число отдельно
  strncpy(test, str + end, chartotal - 1 - end);
  arr[k++] = atoi(test);

  // Выводим содержимое массива arr с числами
  for(i = 0; i < numbertotal; i++)
  {
    cout << arr[i] << endl;
  }

  // Освобождаем выделенную память
  delete [] str;
  delete [] arr;

  // Пауза перед закрытием
  system("PAUSE");
  return 0;
}
long filesize(FILE *pFile)
{
  long result;
  fseek (pFile , 0 , SEEK_END);
  result = ftell (pFile);
  rewind (pFile);

  return result;
}


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: