http://www.data.jma.go.jp/kaiyou/db/tide/suisan/suisan.php?stn=NH 気象庁HPより南西諸島 那覇のデータ ※各地域のデータがダウンロードできます。
◎ テキストファイルの改行コードは「LF」です。 
 ◎ テキストファイルのフォーマットは以下のようになっています。
 毎時潮位 年月日 地点記号 (満潮時刻・潮位)×4 (干潮時刻・潮位)×4 
 毎時潮位データ 時分 潮位 … 時分 潮位 時分 潮位 … 時分 潮位 
 91 71 …134123 16 1 1 TK 913 167 … 9999 999 241 56 … 9999 999
  毎時潮位データ :  1~ 72カラム  3桁×24時間(0時から23時) 
  年月日 : 73~ 78カラム  2桁×3 
  地点記号 : 79~ 80カラム  2桁英数字記号 
  満潮時刻・潮位 : 81~108カラム  時刻4桁(時分)、潮位3桁(cm) 
  干潮時刻・潮位 : 109~136カラム  時刻4桁(時分)、潮位3桁(cm) 
  ※ 満(干)潮が予測されない場合、満(干)潮時刻を「9999」、潮位を「999」としています。
地点記号については「潮位表掲載地点一覧表(2018年)」をご覧下さい。
なお、上記の例から読み取ると、
  東京の2018年1月1日
  毎時潮位 0時 41cm、1時 81cm … 22時 -8cm、23時 -13cm
  満潮時刻  4時48分、潮位 187cm …
  干潮時刻 10時16分、潮位  99cm …
 東京の2016年1月1日 
  毎時潮位 0時 91cm、1時 71cm … 22時 134cm、23時 123cm 
  満潮時刻 9時13分、潮位 167cm … 
  干潮時刻 2時41分、潮位  56cm …
データのフォーマットは上記のようになっています。
これをC#で作成したプログラムに取込、表示してみましょう。
使用されているVBStrings関数は下記のHPを参考にしています。
http://jeanne.wankuma.com/tips/csharp/string/leftb.html
※有用なのはTextRead()だけかもしれませんね。
/***************ソース C#*************/
//毎時潮位データ : 1~ 72カラム 3桁×24時間(0時から23時)
string[,] tyoi = new string[400, 25];//24時間データ×1年分
private void  TimedataRead(string data, int idx)
 {
          int k = 1;
          for (int i = 0; i < 24; i++)
         {
                 tyoi[idx, i] = VBStrings.Mid(data, k, 3);
                 k = k + 3;
         }
 }
潮汐情報として配列の潮汐情報に取り込みます。
string Mes = “”;
  int 日数;
  string[,]  潮汐情報 = new string[400, 18];
private void TextRead()
 {
         string line;
         string buf;
// Read the file and display it line by line.
        System.IO.StreamReader file = new System.IO.StreamReader(@”.\NH.txt”);
         int i = 0;
         while ((line = file.ReadLine()) != null)
         {
                //年月日 : 73~ 78カラム  2桁×3 
                  buf = VBStrings.Mid(line, 73, 6);
                  string yy = buf;// DateTime.Today.ToString(“yyMMdd”);
                  char[] dd = { yy[0], yy[1], ‘/’, yy[2], yy[3], ‘/’, yy[4], yy[5] };
                  string dt = new string(dd);
                  dt = “20” + dt; // 2099年まで有効 2100年以降は”21”とする
                  潮汐情報[i, 0] = dt;//西暦yyyy表示
                  TimedataRead(line, i);
                   tyoi[i, 24] = dt;//西暦yyyy表示
                   if (DateTime.Parse(dt) >= DateTime.Today)
                   {
                                string man = VBStrings.Mid(line, 81, 4);//満潮時刻・潮位データ 81~108カラム  時刻4桁(時分)、潮位3桁(cm) 
                                string bb = VBStrings.Left(man, 2);
                                string cc = VBStrings.Right(man, 2);
                                潮汐情報[i, 1] = man = bb + “:” + cc;
                                潮汐情報[i, 2] = VBStrings.Mid(line, 85, 3);
                                string man1 = VBStrings.Mid(line, 88, 4);
                                bb = VBStrings.Left(man1, 2);
                                cc = VBStrings.Right(man1, 2);
                                潮汐情報[i, 3] = man1 = bb + “:” + cc;//時刻 hh:mm 4桁(時:分)
                                潮汐情報[i, 4] = VBStrings.Mid(line, 92, 3);//潮位3桁(cm)
                                string man2 = VBStrings.Mid(line, 95, 4);
                                bb = VBStrings.Left(man2, 2);
                                cc = VBStrings.Right(man2, 2);
                                潮汐情報[i, 5] = man2 = bb + “:” + cc;
                                潮汐情報[i, 6] = VBStrings.Mid(line, 99, 3);
                                string man3 = VBStrings.Mid(line, 102, 4);
                                bb = VBStrings.Left(man3, 2);
                                cc = VBStrings.Right(man3, 2);
                                潮汐情報[i, 7] = man3 = bb + “:” + cc;
                                潮汐情報[i, 8] = VBStrings.Mid(line, 106, 3);
                                string kan = VBStrings.Mid(line, 109, 4);//干潮時刻・潮位データ 109~136カラム  時刻4桁(時分)、潮位3桁(cm) 
                                bb = VBStrings.Left(kan, 2);
                                cc = VBStrings.Right(kan, 2);
                                潮汐情報[i, 9] = kan = bb + “:” + cc;
                                潮汐情報[i, 10] = VBStrings.Mid(line, 113, 3);
                                string kan1 = VBStrings.Mid(line, 116, 4);
                                bb = VBStrings.Left(kan1, 2);
                                cc = VBStrings.Right(kan1, 2);
                                潮汐情報[i, 11] = kan1 = bb + “:” + cc;
                                潮汐情報[i, 12] = VBStrings.Mid(line, 120, 3);
                                string kan2 = VBStrings.Mid(line, 123, 4);
                                bb = VBStrings.Left(kan2, 2);
                                cc = VBStrings.Right(kan2, 2);
                                潮汐情報[i, 13] = kan2 = bb + “:” + cc;
                                潮汐情報[i, 14] = VBStrings.Mid(line, 127, 3);
                                string kan3 = VBStrings.Mid(line, 130, 4);
                                bb = VBStrings.Left(kan3, 2);
                                cc = VBStrings.Right(kan3, 2);
                                潮汐情報[i, 15] = kan3 = bb + “:” + cc;
                                潮汐情報[i, 16] = VBStrings.Mid(line, 134, 3);
                               i++;
                    }
         }
        日数 = i;
        file.Close();
}
// 潮位を表示する
 private void 潮汐dsp(string dd)
 {
  m_dt2.Rows.Clear();
  int s = 0;
  int cnt = 0;
  for (int i = 0; i < 400; i++)
 {
   string dd1 = DateTime.Parse(dd).ToString(“yyyy/”) + DateTime.Parse(dd).ToString(“MM/dd”).Replace(“0″, ” “);
   string dd2 = tyoi[i, 24];
   if (dd1 == dd2)
   {
      cnt++;
      Set潮位表(i);
      s = i;
      break;
   }
 }
  if (cnt == 0) return;
  int y = 0;
  for (int t = 0; t < 船数; t++)
 {
   if (船No.Text == 船情報[t, 0])//.IndexOf(検索名.Text))
   {
     if (船情報[t, 16] == “”) 船情報[t, 16] = “0”;
     y = int.Parse(船情報[t, 16]);//return 船情報[i, 2];
     shellH.Text = 船情報[t, 15];
     潮位.Text = 船情報[t, 16];
     break;
   }
 }
 for (int r = 0; r < 24; r++)
 {
   int x = int.Parse(tyoi[s, r]);
   if (x < y) 潮位表[r + 1, 0].Style.BackColor = Color.Pink;
 }
}
 // 潮位表というdataGridViewコントロールをFormにあらかじめ配置しておく名称は任意です。
 private void Set潮位表(int i)
 {
   int t = 0;
    int ans = 0;
    for (t = 0; t < 船数; t++)
    {
       if (船No.Text == 船情報[t, 0])//.IndexOf(検索名.Text))
       {
          if (船情報[t, 16] == “”) 船情報[t, 16] = “0”;
          ans = int.Parse(船情報[t, 16]);
          break;
       }
    }
   潮位表DataSet.Tables[“潮位表DataTable”].Rows.Add(
   tyoi[i, 24],
   tyoi[i, 0],//0 
   tyoi[i, 1],//1 
   tyoi[i, 2],//3  
   tyoi[i, 3],//3  
   tyoi[i, 4],//5 
   tyoi[i, 5],//7  
   tyoi[i, 6],//7  
   tyoi[i, 7],//9 
   tyoi[i, 8],//10 
   tyoi[i, 9],//11  
   tyoi[i, 10],//12 
   tyoi[i, 11],//13 
   tyoi[i, 12],//14 
   tyoi[i, 13],//15 
   tyoi[i, 14],//16 
   tyoi[i, 15],//17 
   tyoi[i, 16],//18 
   tyoi[i, 17],//19 
   tyoi[i, 18],//20 
   tyoi[i, 19],//21
   tyoi[i, 20],//22 
   tyoi[i, 21],//20 
   tyoi[i, 22],//21
   tyoi[i, 23]//22
   );//
   for (int r = 1; r < 25; r++)
   {
     潮位表.Columns[r].HeaderCell.Style.BackColor = Color.White;
   }
潮位表.EnableHeadersVisualStyles = false;
  string s = VBStrings.Left(潮汐情報[i, 1], 2);
   int s1 = int.Parse(s);
   s = VBStrings.Left(潮汐情報[i, 3], 2);
   int s2 = int.Parse(s);
   s = VBStrings.Left(潮汐情報[i, 5], 2);
   int s3 = int.Parse(s);
   s = VBStrings.Left(潮汐情報[i, 7], 2);
   int s4 = int.Parse(s);
  if (s1 != 99) 潮位表.Columns[s1 + 1].HeaderCell.Style.BackColor = Color.Cyan;
   if (s2 != 99) 潮位表.Columns[s2 + 1].HeaderCell.Style.BackColor = Color.Cyan;
   if (s3 != 99) 潮位表.Columns[s3 + 1].HeaderCell.Style.BackColor = Color.Cyan;
   if (s4 != 99) 潮位表.Columns[s4 + 1].HeaderCell.Style.BackColor = Color.Cyan;
  s = VBStrings.Left(潮汐情報[i, 9], 2);
   int s5 = int.Parse(s);
   s = VBStrings.Left(潮汐情報[i, 11], 2);
   int s6 = int.Parse(s);
   s = VBStrings.Left(潮汐情報[i, 13], 2);
   int s7 = int.Parse(s);
   s = VBStrings.Left(潮汐情報[i, 15], 2);
   int s8 = int.Parse(s);
  if (s5 != 99) 潮位表.Columns[s5 + 1].HeaderCell.Style.BackColor = Color.GreenYellow;
   if (s6 != 99) 潮位表.Columns[s6 + 1].HeaderCell.Style.BackColor = Color.GreenYellow;
   if (s7 != 99) 潮位表.Columns[s7 + 1].HeaderCell.Style.BackColor = Color.GreenYellow;
   if (s8 != 99) 潮位表.Columns[s8 + 1].HeaderCell.Style.BackColor = Color.GreenYellow;
 }
 DataTable m_dt2;
  private DataSet 潮位表DataSet;
private void Set潮位表()
 {
 潮位表DataSet = new DataSet();
 潮位表DataSet.Tables.Add(“潮位表DataTable”);
 DataTable dt = 潮位表DataSet.Tables[“潮位表DataTable”];
潮位表.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dt.Columns.Add(“日付”, Type.GetType(“System.String”));//0
 dt.Columns.Add(“0時”, Type.GetType(“System.String”));//1
 dt.Columns.Add(“1時”, Type.GetType(“System.String”));//2
 dt.Columns.Add(“2時”, Type.GetType(“System.String”));//3
 dt.Columns.Add(“3時”, Type.GetType(“System.String”));//4
 dt.Columns.Add(“4時”, Type.GetType(“System.String”));//5
 dt.Columns.Add(“5時”, Type.GetType(“System.String”));//6
 dt.Columns.Add(“6時”, Type.GetType(“System.String”));//7
 dt.Columns.Add(“7時”, Type.GetType(“System.String”));//8
 dt.Columns.Add(“8時”, Type.GetType(“System.String”));//9
 dt.Columns.Add(“9時”, Type.GetType(“System.String”));//10
 dt.Columns.Add(“10時”, Type.GetType(“System.String”));//11
 dt.Columns.Add(“11時”, Type.GetType(“System.String”));//12
 dt.Columns.Add(“12時”, Type.GetType(“System.String”));//13
 dt.Columns.Add(“13時”, Type.GetType(“System.String”));//14
 dt.Columns.Add(“14時”, Type.GetType(“System.String”));//15
 dt.Columns.Add(“15時”, Type.GetType(“System.String”));//16
 dt.Columns.Add(“16時”, Type.GetType(“System.String”));//17
 dt.Columns.Add(“17時”, Type.GetType(“System.String”));//18
 dt.Columns.Add(“18時”, Type.GetType(“System.String”));//19
 dt.Columns.Add(“19時”, Type.GetType(“System.String”));//20
 dt.Columns.Add(“20時”, Type.GetType(“System.String”));//21
 dt.Columns.Add(“21時”, Type.GetType(“System.String”));//22
 dt.Columns.Add(“22時”, Type.GetType(“System.String”));//21
 dt.Columns.Add(“23時”, Type.GetType(“System.String”));//22
潮位表.AllowUserToAddRows = false;//新規行非表示
 潮位表.AlternatingRowsDefaultCellStyle.BackColor = Color.Azure;
 潮位表.DataSource = 潮位表DataSet.Tables[“潮位表DataTable”];
 潮位表.RowHeadersVisible = false;
 m_dt2 = dt;
for (int i = 0; i < 25; i++)
 {
 潮位表.Columns[i].Width = 42;//班id
}
潮位表.Columns[0].Width = 100;
 潮位表.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
}
