unity > udpImport > SOTからEOTまでのデータ受信 > udpTimeGraph / udpMonitor(udpのRelay)のExportデータ取り込み > udpの送受信 / csv出力

```txt:動作確認
Unity 5.1.3-f1 on MacOS X 10.8.5
```

[v0.2 @ github](https://github.com/yasokada/unity-150913-udpImport/releases/tag/v0.2)


##機能
[udpTimeGraph](https://github.com/yasokada/unity-150908-udpTimeGraph) ([Qiita投稿](http://qiita.com/7of9/items/33f3839bb64d4f367ae8))
と
[udpMonitor](https://github.com/yasokada/unity-150831-udpMonitor) ([Qiita投稿](http://qiita.com/7of9/items/79b2f518a8dd2c9d5066))
に対して、export機能を用いて格納データを取り出してcsvファイル保存する。

##使用例

![Main_unity_-_150913-udpImport_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/847508da-a85c-3b69-b5fd-684bb65a7109.jpeg)

IPとポート番号を押して、いずれかのボタンを押す。

接続先が応答すれば"recv to csv"のメッセージが表示され `import.csv`ファイルにインポートデータ(以下例)が格納される。

```import.csv
SOT
2015/09/13 00:00:00,0.1
2015/09/13 02:10:00,0.45
2015/09/13 03:40:00,-0.45
2015/09/13 05:30:00,-0.45
2015/09/13 09:30:00,0.2
2015/09/13 11:30:00,0.4
2015/09/13 13:30:00,0.1
2015/09/13 16:30:00,0.5
2015/09/13 18:30:00,0.9
2015/09/13 22:00:00,-0.9
EOT
```

##実装

スクリプトは以下。

```importScript.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

/*
 * v0.1 2015/09/13
 *  - checked with udpTimeGraph import
 */ 

public class ImportScript : MonoBehaviour {
	
	public InputField IFipadr;
	public InputField IFport;
	public Text rcvText; // recieved text
	public string sendCommand;

	int getPort() {
		int res = Convert.ToInt16 (IFport.text);
		if (res < 0) {
			res = 0;
		}
		return res;
	}

	bool SendCommand(ref UdpClient client, string ipadr, int port) {
		string sendstr = sendCommand + System.Environment.NewLine;
		byte[] data = ASCIIEncoding.ASCII.GetBytes (sendstr);

		try {
			client.Send (data, data.Length, ipadr, port);
		}
		catch (Exception e) {
			rcvText.text = "snd:" + e.Message;
			return false;
		}
		return true;
	}
	
	void procComm() {
		UdpClient client = new UdpClient ();
		client.Client.SendTimeout = 1000; // msec
		client.Client.ReceiveTimeout = 2000; // msec

		if (SendCommand (ref client, (IFipadr.text), getPort()) == false) {
			return;
		}

		// receive
		IPEndPoint remoteIP = new IPEndPoint(IPAddress.Any, 0);
		string rcvdstr = "";
		byte [] data;

		while (true) {
			try {
				data = client.Receive (ref remoteIP);
				if (data.Length == 0) {
					break; // no response
				}
				string text = Encoding.ASCII.GetString (data);
				rcvdstr += text;
				if (text.Contains("EOT")) { // End of Table
					break;
				}
			} catch (Exception err) {
				Debug.Log(err.Message);
				rcvText.text = "no response";
				break;
			}
		}
		
		client.Close ();

		if (rcvdstr.Length > 0) {
			System.IO.File.WriteAllText("import.csv", rcvdstr);
			rcvText.text = "recvd to csv";
		}
	}
	
	public void onClick() {
		procComm ();
	}
}
```

上記スクリプトを２つのボタンに貼り付ける。
sendCommandだけ異なるようにしている。

- fromUdpTimeGraphの関連付け

![Main_unity_-_150913-udpImport_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/aa0274b2-e33e-5285-5b22-2cc1cf5d7259.jpeg)

- fromUdpMonitorの関連づけ

![Main_unity_-_150913-udpImport_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/3ecb73c3-5518-e190-15ac-2df042af0641.jpeg)