Форум программистов, компьютерный форум CyberForum.ru

Проверка данных из файла - C++

Восстановить пароль Регистрация
 
Ganhart
3 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 11
28.04.2012, 20:15     Проверка данных из файла #1
Добрый день, хотел бы спросить следующее:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
float read (float*ia,string f)
{
char ch;
int i;
ifstream file;
file.open(f);
if ( file.is_open())
{
cout << "Файл открыт!"<<endl;
for (i=0; i<10;i++)
file >> ia[i];
file.close();
//else 
//  cout <<"В файле найдены некорректные данные, укажите другой файл."<<endl;
//  cin >> f;
//  file.open(f);
//  read(ia,f);
}
else if(file.fail())
    {
    cout <<"Не удалось открыть файл, попробуйте еще раз."<<endl;
 
    }
return 0;
}
Функция считывает из файла 10 многозначных чисел и записывает их в массив, как сделать так, чтобы функция проверяла файл на наличие лишних символов(буквы, спецсимволы, знаки препинания).
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2012, 20:15     Проверка данных из файла
Посмотрите здесь:

C++ Проверка файла на пустоту
Проверка файла C++
C++ Проверка открытия файла
C++ Проверка существования файла
C++ Чтение из файла и проверка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
28.04.2012, 21:26     Проверка данных из файла #2
А конкретно что в файле можно узнать ?
С файла нужно считать значения Float ?
Ganhart
3 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 11
28.04.2012, 21:37  [ТС]     Проверка данных из файла #3
Цитата Сообщение от MrCold Посмотреть сообщение
А конкретно что в файле можно узнать ?
С файла нужно считать значения Float ?
Ну в моих файлах 10 любых чисел(которые я сам написал)
Например:
250
138
...
166

Да, с файла читаются значения float (сделал float на всякий случай, ибо будет проверять препод).
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
28.04.2012, 21:50     Проверка данных из файла #4
вот пример если в файле все значения FLOAT
10 значений заносятся в массив A []
если в файле еще символы CHAR то для того чтоб от них
избавится расскоментируйте строку (помечено)

если в файле значения LONG - atof меняйте на atol
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <fstream>
using namespace std;
 
 
int main ()
{
 
    ifstream in ("file.txt");
    
    char dig[50];
   int i = 0, j = 0;
   float A[256];
    
     while (in >> dig && i < 10)
    {
        //if(0 != atof(dig)) <- расскоментировать
        A[i++] = atof(dig);
        }
    for( j = 0;j < i;j++)
        cout << A[j] << endl;
   
    in.close();
    system("pause");
    return 0;
}
Ganhart
3 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 11
29.04.2012, 18:33  [ТС]     Проверка данных из файла #5
Спасибо, попробую, завтра отпишусь

Добавлено через 20 часов 10 минут
А ты не мог бы подсказать, как бы в этом месте:
if(0 != atof(dig))
Сделать так, чтобы он не съедал char'ы, а выдавал некоторое сообщение и запрашивал новый файл?
Спасибо.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
30.04.2012, 01:34     Проверка данных из файла #6
Сделал проверку - файл может содержать только цифры и точки .
Первый вариант проги не особо понравился , поэтому в
двух вариантах .
Во второй - ввод имени файла с циклом .Выход ввести - '0'
Писал на VS2010 в др. среде возможны ошибки ,если что
пишите сюда .

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <fstream> 
#include <string> 
#include <cctype> 
#include <conio.h> 
 
const int SIZE = 10;
 
 
void readFile (float *A, std::string filename)
{        size_t count = 0, i = 0;
         char ch, dig[50];
         std::ifstream file;
         file.open(filename);
         if ( file.is_open())
         {
         std::cout << "The file is opened !!! "<<std::endl;
 
         while(file >> ch)
         {
         if(ch != '.')
         if(!isdigit(ch))
         {
             count++;
             }
         }
         if(count)
        {
        std::cout << "The file  contains invalid characters. Choose a different name of file" << std::endl;
        getch(); exit(1) ; }
        else{
            file.clear();
        file.seekg(std::ios::beg);
     while (file >> dig && i < SIZE)
    {      
        A[i++] = atof(dig);
        }
       }
}
else 
    {
    std::cout <<"Error in opening file !" << std::endl;
    getch(); exit(1) ;
    }
file.close();
}
 
int main()
{     
  std::string filename ;
  size_t i = 0 ;
  float arr[SIZE] = {{0}};
  std::cout <<"Input a name of file :  ";
  getline(std::cin,filename);
  
  readFile(arr,filename);
    for( i = 0;i < SIZE;i++)
        std::cout << arr[i] << std::endl;
 
 getch();                  
                  return 0; 
}
2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <fstream> 
#include <string> 
#include <conio.h> 
 
const int SIZE = 10;
 
bool statusFile(std::ifstream &, std::string);
bool correctData(std::ifstream &, std::string);
void readFile (float *A, std::ifstream &, std::string);
 
int main()
{     
  std::string filename ;
  size_t i = 0 ;
  float arr[SIZE]  = {{0}};
  std::ifstream file;
  for(;;){
       std::cout <<"\nInput a name of file (EXIT - input '0'):\n\n";
  getline(std::cin,filename);
  if(filename == "0") return 0;
  if(!statusFile(file, filename))
  {
      std::cout << "File could not opening ! Choose a different name of file.\n";
  }
  else if(!correctData(file, filename))
  {
      std::cout << "The file  contains invalid characters. Choose a different name of file.\n";
  
  }
  else break;
  }
  readFile(arr, file, filename);
 
  // ПОЛУЧЕННЫЙ МАССИВ 
     for( i = 0;i < SIZE;i++)
        std::cout << arr[i] << std::endl;
  
  getch();                  
                  return 0; 
}
 
bool statusFile(std::ifstream & file, std::string filename)
{
   file.open(filename);
   if(file.fail())
       return false;
   else
       return true;
}
 
bool correctData(std::ifstream &file, std::string filename)
{        size_t count = 0;
         char ch;
    while(file >> ch)
         {
         if(ch != '.')
         if(!isdigit(ch)) count++;
         }
       if(count) return false;
   else
       return true;
 
}
 
void readFile (float *A, std::ifstream &file, std::string filename)
{   
         char ch[50];
         size_t i = 0;
        file.clear();
        file.seekg(std::ios::beg);
     while (file >> ch && i < SIZE)
    {      
        A[i++] = atof(ch);
        }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2012, 18:34     Проверка данных из файла
Еще ссылки по теме:

C++ Проверка на наличие файла
C++ Проверка текстового файла
Проверка правильности данных при считывании из файла C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ganhart
3 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 11
01.05.2012, 18:34  [ТС]     Проверка данных из файла #7
Спасибо, попробую, отпишусь.

Добавлено через 20 часов 27 минут
Спасибо, немного по шаманил с твоим кодом и заработало!
Yandex
Объявления
01.05.2012, 18:34     Проверка данных из файла
Ответ Создать тему
Опции темы

Текущее время: 04:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru