«Анализ данных» означает, что вы берете некоторые необработанные данные и вводите в данные конкретное значение.
«Чтение данных» - это менее конкретный термин, но в данном контексте он может означать «получение необработанных данных в вашу программу с какого-либо устройства». Здесь «какое-то устройство» может быть многим - это может быть терминал (стандартный), диск, сетевое соединение и так далее. Программа может читать необработанные данные, не зная, что эти данные означают. Программа просто получит последовательность чисел (байтов), не зная, что означают эти числа. В псевдокоде:
// READ DATA
unsigned char array[some-size];
size_t index = 0;
while(input-device-has-data)
{
array[index] = get-input-from-device();
++index;
}
После этого цикла, который читает данные, массив может содержать:
array[0]: 74
array[1]: 79
array[2]: 69
array[3]: 32
array[4]: 52
array[5]: 50
array[6]: 0
Последовательность чисел, которая на самом деле ничего не значит. Поэтому следующим шагом является настройка некоторых правил для данных, чтобы сделать их осмысленными. Первый шаг - это кодирование, то есть, что означает число 74? Одной из таких кодировок является таблица ascii, которая определяет, как числа переводятся в символы. Используя таблицу ascii, вышеприведенные числа становятся:
array[0]: J
array[1]: O
array[2]: E
array[3]: space
array[4]: 4
array[5]: 2
array[6]: NUL
Затем вы можете установить правила для данных, которые ваша программа должна получать. В этом простом примере правило будет выглядеть примерно так: name age
Итак, в вашей программе вы захотите «преобразовать необработанные данные» в две переменные. Одна переменная, которая содержит имя, и другая переменная, которая содержит возраст. В псевдокоде:
string name = get_name(array);
int age = get_age(array);
То есть «для анализа» данных, т. Е. Взять некоторые необработанные данные (последовательность чисел), внести в данные конкретное значение (семантическое), соблюдая при этом некоторые правила для данных (синтаксис).
И это именно то, что функции семейства scanf могут сделать для вас. В этом случае, как:
// Parsing
char name[20];
int age;
int result = sscanf(array, "%19s %d", name, &age);
Здесь sscanf
анализирует необработанные данные, содержащиеся в array
, и пытается отобразить необработанные данные в слово (так называемое имя - не более 19 символов), за которым следует пробел, за которым следует число (также называемое возрастом). Это правила, которые устанавливает спецификатор формата, то есть строка "%19s %d"
.
Если sscanf
может проанализировать данные в соответствии с этими правилами, он вернет значение 2, чтобы сказать, что данные были проанализированы в 2 переменные, а переменная name
будет содержать первое слово, а переменная age
будет содержать число. Вот что такое разбор.