Задача состоит в том, чтобы читать в текстовом файле с аргументом командной строки, в файле есть список неструктурированной информации Список каждый аэропорт в штате Флорида noteэто только фрагмент файла. Есть некоторые данные, которые необходимо игнорировать, такие как ASO ORL PR A 0 18400 - все, что не относится к структурированным переменным в AirPdata.File I/O Экстракция структур в C
У задание запрашивается номер сайта, locID, имя поля, город, штат, широта, долгота, и если есть диспетчерская башня или нет.
ВХОД
03406,20 * H 2FD7 ВОЗДУХА Орландо FL АСО ORL PR-28-26-08.0210N 081-28-23.2590W PR-НЕ-NPIAS Н.А. 0 18400
03406,18 * Н 32FL МКП Орландо Майер-FL АСО ORL PR-28-30-05.0120N 081-22-06.2490W PR-НЕ NPAS Н 0 0
ВЫХОД
Site# LocID Airport Name City ST Latitude Longitude Control Tower
------------------------------------------------------------------------
03406.20*H 2FD7 AIR ORLANDO ORLANDO FL 28-26-08.0210N 081-28-23.2590W N
03406.18*H 32FL MEYER ORLANDO FL 28-30.05.0120N 081-26-39.2560W N
etc.. etc. etc.. etc.. .. etc.. etc.. ..
etc.. etc. etc.. etc.. .. etc.. etc.. ..
мой код до сих пор выглядит
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
typedef struct airPdata{
char *siteNumber;
char *locID;
char *fieldName;
char *city;
char *state;
char *latitude;
char *longitude;
char controlTower;
} airPdata;
int main (int argc, char* argv[])
{
char text[1000];
FILE *fp;
char firstwords[200];
if (strcmp(argv[1], "orlando5.txt") == 0)
{
fp = fopen(argv[1], "r");
if (fp == NULL)
{
perror("Error opening the file");
return(-1);
}
while (fgets(text, sizeof(text), fp) != NULL)
{
printf("%s", text);
}
}
else
printf("File name is incorrect");
fflush(stdout);
fclose(fp);
}
До сих пор я в состоянии прочитать весь файл, а затем выводятся неструктурированный ввод в командной строке.
Следующее, что я попытался выяснить, состоит в том, чтобы извлекать по частям строки и хранить их в переменных внутри структуры. В настоящее время я застрял на этом этапе. Я искал информацию об strcpy
и других функциях строковых библиотек, методах извлечения данных, ETL, я просто не знаю, какую функцию использовать правильно в моем коде.
Я сделал что-то очень похожее на это в java, используя подстроки, и если есть способ взять подстроку массивной строки текста и задать параметры того, какие подстроки удерживаются в какой переменной, что потенциально Работа. таких как ... LocID длиной не более 4 символов, поэтому все, что имеет числовую/буквенную комбинацию, состоящую из четырех букв, можно сохранить, например, в airPdata.LocID
.
После того, как переменные хранятся внутри структур, я знаю, что я должен использовать strtok
, чтобы организовать их в списке по сайту #, locID ... и т. Д. Однако, это мое лучшее предположение, чтобы подойти к этой проблеме, м довольно потеряно.
Вы можете получить строку за строкой с помощью 'fgets()', и они разбиваются на слова с помощью 'strtok'. имейте в виду, что 'strtok' меняет ваши строки и добавляет' \ 0', если вам нужен текст для дальнейшего использования. –
В своем вопросе вы говорите, что знаете, что вам нужно использовать 'strtok', что неплохо начать решение проблемы. Так что ты застрял? Просто сказать, что ваш потерянный не вызывает большой вопрос. –
Я не уверен, что «назначение» означает, что это упражнение. Практический ответ - импортировать его в SQLite и использовать SQL. – Schwern