Чтение и анализ штатов США при помощи сокетов
Сокеты, как и другие потоки, могут читаться и анализироваться через операции с потоками.
Откройте соединение с сервером, содержащим текстовую информацию.
In[1]:=
![Click for copyable input](assets.ru/read-and-parse-us-states-with-sockets/In_14.png)
socket = SocketConnect["http://exampledata.wolfram.com"]
Out[1]=
![](assets.ru/read-and-parse-us-states-with-sockets/O_12.png)
Запишите строку, содержащую GET запрос для текстового файла со всеми штатами США.
In[2]:=
![Click for copyable input](assets.ru/read-and-parse-us-states-with-sockets/In_15.png)
WriteLine[socket, "GET /50states.txt HTTP/1.0 \n"]
Считайте первую строку ответа.
In[3]:=
![Click for copyable input](assets.ru/read-and-parse-us-states-with-sockets/In_16.png)
ReadLine[socket]
Out[3]=
![](assets.ru/read-and-parse-us-states-with-sockets/O_13.png)
Считайте все оставшиеся строки.
In[4]:=
![Click for copyable input](assets.ru/read-and-parse-us-states-with-sockets/In_17.png)
output = ReadString[socket];
Проверьте середину строки для определения начала новой строки в спискe штатов.
In[5]:=
![Click for copyable input](assets.ru/read-and-parse-us-states-with-sockets/In_18.png)
StringTake[output, {277, 347}]
Out[5]=
![](assets.ru/read-and-parse-us-states-with-sockets/O_14.png)
Используйте SemanticImportString для анализа выходных данных и удалите любые элементы, которые не смогли пройти анализ.
In[6]:=
![Click for copyable input](assets.ru/read-and-parse-us-states-with-sockets/In_19.png)
states = DeleteMissing[SemanticImportString[output]]
Out[6]=
![](assets.ru/read-and-parse-us-states-with-sockets/O_15.png)
Проверьте, что все штаты были действительно перечислены.
In[7]:=
![Click for copyable input](assets.ru/read-and-parse-us-states-with-sockets/In_20.png)
Equal[Length[states],
Length[EntityList[
EntityClass["AdministrativeDivision", "USStatesAllStates"]]]]
Out[7]=
![](assets.ru/read-and-parse-us-states-with-sockets/O_16.png)
Закройте поток.
In[8]:=
![Click for copyable input](assets.ru/read-and-parse-us-states-with-sockets/In_21.png)
Close[socket]