コードを見てやりたいことは何となくわかりました。
ロジックを尊重して後半部分を書き換えると
VC++
1// 配列に格納
2CString cs_all_data = m_cs_original;
3CString cs_left, cs_right;
4int r = 0, c = 0, nStart = 0;
5for (int i = 1; i <= cs_all_data.GetLength(); i++) {
6 cs_left = cs_all_data.Mid(nStart, i - nStart);
7 cs_right = cs_left.Right(1);
8 cs_right2 = cs_left.Right(4);
9
10 if (cs_right == _T(",") || cs_right == _T("\t")) { //★
11 m_cs_table[r][c] = cs_left.Left(cs_Left.GetLength() - 1);
12 c++;
13 nStart = i;
14 }
15 else if (cs_right2 == _T(" ") {
16 m_cs_table[r][c] = cs_left.Left(cs_left.GetLength() - 4);
17 c++;
18 nStart = i;
19 }
20 else if (cs_right == _T("\n")) {
21 m_cs_table[r][c] = cs_left.Left(cs_Left.GetLength() - 1);
22 r++;
23 c = 0;
24 nStart = i;
25 }
26}
タブが半角4文字の場合はちょっと処理を分ける必要があります、タブ文字を使用している場合は"\t"で判断できますので★のようにできます。
配列m_cs_talbeは
VC++
1CString m_cs_table[256][2];
2
みたいに宣言されている前提で使用しています。
ただ、もうちょっとスマートなやり方もあります。せっかくファイルからの読み込みの処理で1行ずつループしているのに、配列の格納にまたループを使うのはちょっと冗長ではないかと思います。
全体を書き直すと、
VC++
1// ファイルの読み込み
2CStdioFile file;
3if (!file.Open(m_FilePath_in, CFile::modeRead)) {
4 // ファイル読み込みエラー時の処理を記述
5
6 return;
7}
8CString line;
9int r = 0;
10while (file.ReadString(line)) {
11 // 読み込んだ行を分割して配列に格納
12 int nStart = 0;
13 int pos1 = line.Find(_T(","));
14 int pos2 = line.Find(_T("\t"));
15 int pos3 = line.Find(_T(" "));
16 if (pos1 == -1 && pos2 == -1 && pos3 == -1) {
17 // この行には区切り文字がない
18 continue;
19 }
20
21 int spos, epos;
22 if (pos1 != -1) {
23 spos = pos1;
24 epos = pos1 + 1;
25 } else if (pos2 != -1) {
26 spos = pos2;
27 epos = pos2 + 1;
28 } else if (pos3 != -1) {
29 spos = pos3;
30 epos = pos3 + 4;
31 }
32
33 m_cs_table[r][0] = line.Left(spos);
34 m_cs_table[r][1] = line.Mid(epos);
35 r++;
36}
実際に動かしていないのと正確に仕様を把握していないので、問題があるかもしれませんが、ご参考までに。