#import #ip-address #octave #type-conversion
#импортировать #ip-адрес #octave #тип-преобразование
Вопрос:
У меня есть набор данных, состоящий из IP-адресов, переданных пакетов и т.д. Octave преобразует IP-адреса в значения с плавающей точкой. Как мне импортировать IP-адреса как есть и какой тип данных следует использовать (строка?)?
Ответ №1:
Как вы импортируете их в octave? GNU Octave имеет множество функций для загрузки / сохранения данных. Это зависит от того, как ваши IP-адреса (IPv4 или IPv6?) хранятся в вашем файле, какая функция является самой простой / наилучшей для вас.
Например, если у вас есть файл под названием «ips.txt «.
192.168.10.4
8.8.8.8
14.32.244.8
Вы могли бы использовать это для получения ячейки:
octave:1> f = fopen("ips.txt", "r");
octave:2> l = textscan(f, "%s");
octave:3> fclose(f);
octave:4>
octave:4> l{1}
ans =
{
[1,1] = 192.168.10.4
[2,1] = 8.8.8.8
[3,1] = 14.32.244.8
}
octave:5>
Но, возможно, char (fread (..)) или fgetl могут быть лучше для вас, в зависимости от того, что вы хотите сделать позже с импортированными IP-адресами…
дополнение: Поскольку вы отметили, что у вас есть IP-адреса, находящиеся внутри списка с плавающей точкой, а не фиксированной схемы (фиксированной схемой было бы, например: «Требуемые IP-адреса находятся в начале строки, 4.th столбец или что-то подобное, что может быть обработано с помощью awk) Я также добавляю возможность с помощью регулярного выражения:
Я создал этот файл ips.txt:
192.168.10.4 some text 3.14 8.8.8.8
other 123.44 14.32.244.8
4.667.2 12.943 127.0.0.1 hello world
И загрузите его с помощью этого скрипта, используя regexp
f = fopen("ips.txt", "r");
x = char(fread(f));
fclose(f);
[S, E, TE, M, T, NM, SP] = regexp (x', '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}');
что дает вам для M:
M =
{
[1,1] = 192.168.10.4
[1,2] = 8.8.8.8
[1,3] = 14.32.244.8
[1,4] = 127.0.0.1
}
— Энди
Комментарии:
1. Моя строка состоит из IP-адресов, а также числовых данных, скажем, в формате: IPAddress, IPAddress, int data1,…. int datan, float data1,…float datan. Что делать в этом случае?
2. Адреса IPv4? И они смешиваются без системы? Я не вижу фиксированной схемы в вашем комментарии. В этом случае вы могли бы использовать регулярное выражение для извлечения строк, состоящих из (от одной до трех цифр) (точка) … Я думаю, было бы хорошо, если бы вы добавили фрагмент (возможно, первые 5 строк?) вашего файла.
3. Существует фиксированная схема для IP-адресов. Первые два столбца — это IP-адреса, которые мне нужно преобразовать в строку. Вот несколько примеров строк: 1) 197.148.2.59 214.94.210.8 6 1 3552 4899 1 48 1 1141395274.903832000 1141395274.903832000 2) 161.194.73.174 199.14.135.17 17 1 1785 53 6 458 1 1141394547.311557000 1141395278.368583000 3) 211.143.181.211 140.223.154.73 6 1 443 2654 2 84 1 1141395283.726913000 1141395283.927282000 4) 94.82.131.157 165.28.40.41 6 1 1695 3128 3 462 1 1141394439.018936000 1141394440.402323000 5) 214.94.198.179 207.100.116.38 6 1 58702 25 4 240 1 1141394590.835600000 1141394632.835990000