... | ... | @@ -2537,67 +2537,62 @@ var cmd = ExtractString("exec APP.COMMON.SET(NID=PN000101,CMD='ED-SYS::::1')", " |
|
|
>
|
|
|
|
|
|
``` c#
|
|
|
static class ExtractStringProgram
|
|
|
public static string ExtractString(this string source, string beginDelim, string endDelim)
|
|
|
{
|
|
|
public static string ExtractString(this string source, string beginDelim, string endDelim)
|
|
|
{
|
|
|
//source가 ""면 바로 끝.
|
|
|
if (source == "") return "";
|
|
|
|
|
|
//beginDelim이 source에 있는지 체크
|
|
|
//endDelim의 경우 beginDelim 이후의 존재 유무만 체크.
|
|
|
if (source.IndexOf(beginDelim) == -1) return "";
|
|
|
if (source.Substring(source.IndexOf(beginDelim) + beginDelim.Length).IndexOf(endDelim) == -1) return "";
|
|
|
//beginDelim이 source에 있는지 체크
|
|
|
//endDelim의 경우 beginDelim 이후의 존재 유무만 체크.
|
|
|
if (source.IndexOf(beginDelim) == -1) return "";
|
|
|
if (source.Substring(source.IndexOf(beginDelim) + beginDelim.Length).IndexOf(endDelim) == -1) return "";
|
|
|
|
|
|
//beginDelim 첫번째 글자의 번호
|
|
|
int beginIndex = source.IndexOf(beginDelim);
|
|
|
//beginDelim 첫번째 글자의 번호
|
|
|
int beginIndex = source.IndexOf(beginDelim);
|
|
|
|
|
|
//endDelim 첫번째 글자의 번호(beginDelim 이후에서 찾음)
|
|
|
int endIndex = source.Substring(beginIndex + beginDelim.Length).IndexOf(endDelim) + beginIndex + beginDelim.Length;
|
|
|
//endDelim 첫번째 글자의 번호(beginDelim 이후에서 찾음)
|
|
|
int endIndex = source.Substring(beginIndex + beginDelim.Length).IndexOf(endDelim) + beginIndex + beginDelim.Length;
|
|
|
|
|
|
//begin, end 둘다 "" 이면 문자열 그대로 출력
|
|
|
if (beginDelim == "" && endDelim == "")
|
|
|
{
|
|
|
return source;
|
|
|
}
|
|
|
//begin만 ""이면 문자열 처음부터 endDelim까지 출력.
|
|
|
else if (beginDelim == "" && endDelim != "")
|
|
|
{
|
|
|
return source.Substring(0, beginIndex);
|
|
|
}
|
|
|
//end만 ""이면 beginDelim부터 문자열 끝까지 출력.
|
|
|
else if (beginDelim != "" && endDelim == "")
|
|
|
//begin, end 둘다 "" 이면 문자열 그대로 출력
|
|
|
if (beginDelim == "" && endDelim == "")
|
|
|
{
|
|
|
return source;
|
|
|
}
|
|
|
//begin만 ""이면 문자열 처음부터 endDelim까지 출력.
|
|
|
else if (beginDelim == "" && endDelim != "")
|
|
|
{
|
|
|
return source.Substring(0, endIndex);
|
|
|
}
|
|
|
//end만 ""이면 beginDelim부터 문자열 끝까지 출력.
|
|
|
else if (beginDelim != "" && endDelim == "")
|
|
|
{
|
|
|
return source.Substring(beginIndex + beginDelim.Length, source.Length - (beginIndex + beginDelim.Length));
|
|
|
}
|
|
|
//begin, end 둘 다 아니면 문자열 추출.
|
|
|
else
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
return source.Substring(beginIndex + beginDelim.Length, source.Length - (beginIndex + beginDelim.Length));
|
|
|
return source.Substring(beginIndex + beginDelim.Length, endIndex - (beginIndex + beginDelim.Length));
|
|
|
}
|
|
|
//begin, end 둘 다 아니면 문자열 추출.
|
|
|
else
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
return source.Substring(beginIndex + beginDelim.Length, endIndex - (beginIndex + beginDelim.Length));
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
return "";
|
|
|
}
|
|
|
return "3";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static void Main()
|
|
|
{
|
|
|
var code = ExtractString("실행중 문제가 발생했습니다. Error Code [20]", "[", "]");
|
|
|
public static void Main()
|
|
|
{
|
|
|
var code = ExtractString("실행중 문제가 발생했습니다. Error Code [20]", "", "]");
|
|
|
|
|
|
Console.WriteLine(code);
|
|
|
Console.WriteLine(code);
|
|
|
|
|
|
var cmd = ExtractString("exec APP.COMMON.SET(NID = PN000101, CMD = 'ED-SYS::::1')", "CMD = '", "'");
|
|
|
var cmd = ExtractString("exec APP.COMMON.SET(NID = PN000101, CMD = 'ED-SYS::::1')", "CMD = '", "'");
|
|
|
|
|
|
Console.WriteLine(cmd);
|
|
|
Console.WriteLine(cmd);
|
|
|
|
|
|
var cmd2 = ExtractString("나는 박도현입니다. 박도현입니까? ", "박", "");
|
|
|
var cmd2 = ExtractString("1-C1", "-", " ");
|
|
|
|
|
|
Console.WriteLine(cmd2);
|
|
|
}
|
|
|
Console.WriteLine(cmd2);
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
<br />
|
... | ... | @@ -2627,79 +2622,260 @@ unsorted.Add("TP3GC.3");* |
|
|
|
|
|
|
|
|
```c#
|
|
|
class SortAidProgram
|
|
|
class SortAidComparer : IComparer<string>
|
|
|
{
|
|
|
static char[] alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
|
|
|
static string[] undefines = { "", "---", "undef", "모든유니트", "모든 유니트" };
|
|
|
|
|
|
public static List<string> SortAidList(List<string> unsortedList)
|
|
|
public static int ExtractSlot(string text)
|
|
|
{
|
|
|
unsortedList.Sort(); //맨 처음엔 문자열 기준으로 자동 정렬
|
|
|
int lowPos = 0; //swap을 위한 변수
|
|
|
int slot;
|
|
|
|
|
|
bool check = int.TryParse(text.ExtractString(".", ""), out slot);
|
|
|
|
|
|
if (!check) { slot = int.Parse(text.ExtractString(".", "-")); }
|
|
|
|
|
|
return slot;
|
|
|
}
|
|
|
|
|
|
public static int? ExtractPortNum(string text)
|
|
|
{
|
|
|
int? portNumber;
|
|
|
|
|
|
int slotLength = ExtractSlot(text).ToString().Length;
|
|
|
|
|
|
string temp = text.ExtractString(".", "");
|
|
|
|
|
|
//port가 없을 때
|
|
|
if (temp.Length == slotLength)
|
|
|
{
|
|
|
portNumber = null;
|
|
|
|
|
|
return portNumber;
|
|
|
}
|
|
|
|
|
|
for (int i = 0; i < unsortedList.Count; i++)
|
|
|
//port와 remote RN 있을 때
|
|
|
if (temp.Contains("("))
|
|
|
{
|
|
|
temp = temp.ExtractString("-", "(");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
lowPos = i;
|
|
|
temp = temp.ExtractString("-", "");
|
|
|
}
|
|
|
|
|
|
portNumber = int.Parse(temp.TrimStart(alpha));
|
|
|
return portNumber;
|
|
|
}
|
|
|
|
|
|
for (int j = i + 1; j < unsortedList.Count; j++)
|
|
|
public static int OrderBySlotAndPort(string x, string y)
|
|
|
{
|
|
|
int xSlot = ExtractSlot(x);
|
|
|
int ySlot = ExtractSlot(y);
|
|
|
|
|
|
if (xSlot > ySlot)
|
|
|
{
|
|
|
return 1;
|
|
|
}
|
|
|
else if (xSlot < ySlot)
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
//slot이 같다면 port 대소 비교로 정렬
|
|
|
else
|
|
|
{
|
|
|
//port가 없는 aid 먼저 앞으로 정렬
|
|
|
if (ExtractPortNum(x) == null && ExtractPortNum(y) == null)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
else if (!(ExtractPortNum(x) == null) && ExtractPortNum(y) == null)
|
|
|
{
|
|
|
//'.' 이전의 문자열이 같은 문자열끼리 '.'뒤의 숫자비교
|
|
|
if (ExtractStringProgram.ExtractString(unsortedList[i], "", ".")
|
|
|
.Equals(ExtractStringProgram.ExtractString(unsortedList[j], "", ".")))
|
|
|
return 1;
|
|
|
}
|
|
|
else if (ExtractPortNum(x) == null && !(ExtractPortNum(y) == null))
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
//port가 있는 aid 끼리 port number 대소비교
|
|
|
else
|
|
|
{
|
|
|
if (ExtractPortNum(x) > ExtractPortNum(y))
|
|
|
{
|
|
|
return 1;
|
|
|
}
|
|
|
else if (ExtractPortNum(x) < ExtractPortNum(y))
|
|
|
{
|
|
|
//j,lowPos가 가리키는 값을 담기 위한 변수
|
|
|
int numOfj;
|
|
|
int numOfLowPos;
|
|
|
return -1;
|
|
|
}
|
|
|
//port number까지 같으면 나머지 문자열 비교
|
|
|
else
|
|
|
{
|
|
|
return x.CompareTo(y);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//'.'이후에 숫자만 있으면 바로 int로 형변환, 숫자와 문자가 섞여있다면 밑에서 ExtractString 이용해서 숫자만 추출
|
|
|
bool isConvertiblej = int.TryParse(unsortedList[j].Split('.').ElementAt(1), out numOfj);
|
|
|
bool isConvertibleLowPos = int.TryParse(unsortedList[lowPos].Split('.').ElementAt(1), out numOfLowPos);
|
|
|
public static bool isUndefine(string x)
|
|
|
{
|
|
|
foreach (string undefine in undefines)
|
|
|
{
|
|
|
if (x == undefine) return true;
|
|
|
}
|
|
|
|
|
|
if (!isConvertiblej) numOfj = int.Parse(ExtractStringProgram.ExtractString(unsortedList[j], ".", "-"));
|
|
|
if (!isConvertibleLowPos) numOfLowPos = int.Parse(ExtractStringProgram.ExtractString(unsortedList[lowPos], ".", "-"));
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
//'.' 뒤에 나오는 숫자만 추출해서 비교
|
|
|
if (numOfLowPos > numOfj) lowPos = j;
|
|
|
else if (numOfLowPos == numOfj) //만약 추출한 숫자가 같다면
|
|
|
{
|
|
|
//"-C1" 꼴의 문자열이 붙는 요소 끼리만 비교
|
|
|
if (unsortedList[lowPos].Contains("-") && unsortedList[j].Contains("-"))
|
|
|
{
|
|
|
//"-C1" 꼴에서 숫자만 추출
|
|
|
int restNumOfLowPos = int.Parse(unsortedList[lowPos].Split('-').ElementAt(1).TrimStart(alpha));
|
|
|
int restNumosj = int.Parse(unsortedList[j].Split('-').ElementAt(1).TrimStart(alpha));
|
|
|
public int Compare(string x, string y)
|
|
|
{
|
|
|
//null 체크
|
|
|
if (x == null && y == null)
|
|
|
{
|
|
|
return 0; //x == y
|
|
|
}
|
|
|
else if (x == null && y != null)
|
|
|
{
|
|
|
return -1; //x < y
|
|
|
}
|
|
|
else if (x != null && y == null)
|
|
|
{
|
|
|
return 1; // x > y
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
// '.'이 없는것 (" ", "---", "undef", 등등)을 앞으로 보내는 체크
|
|
|
if (isUndefine(x) && isUndefine(y))
|
|
|
{
|
|
|
return x.ExtractString("", ".").CompareTo(y.ExtractString("", "."));
|
|
|
}
|
|
|
else if (isUndefine(x) && !isUndefine(y))
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
else if (!isUndefine(x) && isUndefine(y))
|
|
|
{
|
|
|
return 1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//TID, FullPath가 없는 aid를 TID, FullPath가 있는 aid들 보다 앞으로 정렬하는 부분
|
|
|
if (x.IndexOf('.') == 5 && y.IndexOf('.') == 5)
|
|
|
{
|
|
|
}
|
|
|
else if (!(x.IndexOf('.') == 5) && y.IndexOf('.') == 5)
|
|
|
{
|
|
|
return 1;
|
|
|
}
|
|
|
else if (x.IndexOf('.') == 5 && !(y.IndexOf('.') == 5))
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
}
|
|
|
|
|
|
if (restNumOfLowPos > restNumosj) lowPos = j;
|
|
|
}
|
|
|
}
|
|
|
//"." 앞의 문자열이 동일하다면 그때는 slot과 port 기준으로 정렬
|
|
|
if (x.ExtractString("", ".").CompareTo(y.ExtractString("", ".")) == 0)
|
|
|
{
|
|
|
return OrderBySlotAndPort(x, y);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return x.ExtractString("", ".").CompareTo(y.ExtractString("", "."));
|
|
|
}
|
|
|
}
|
|
|
string temp = unsortedList[i]; //swap
|
|
|
unsortedList[i] = unsortedList[lowPos];
|
|
|
unsortedList[lowPos] = temp;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class SortAidProgram
|
|
|
{
|
|
|
public static List<string> SortAidList(List<string> unsortedList)
|
|
|
{
|
|
|
unsortedList.Sort(new SortAidComparer());
|
|
|
|
|
|
return unsortedList;
|
|
|
}
|
|
|
|
|
|
public static void Main()
|
|
|
{
|
|
|
var unsorted = new List<string>();
|
|
|
unsorted.Add("TP6GC.9");
|
|
|
unsorted.Add("TP6GC.4");
|
|
|
unsorted.Add("TP3GC.1");
|
|
|
unsorted.Add("TP3GC.16");
|
|
|
unsorted.Add("TP3GC.10");
|
|
|
unsorted.Add("TP3GC.3");
|
|
|
unsorted.Add("TP3GC.1-C1");
|
|
|
unsorted.Add("TP3GC.1-C2");
|
|
|
unsorted.Add("TP3GC.3-C2");
|
|
|
unsorted.Add("TP3GC.3-C20");
|
|
|
unsorted.Add("TP3GC.3-C11");
|
|
|
unsorted.Add("TP3GC.3-C385");
|
|
|
unsorted.Add("TPXGU.5");
|
|
|
unsorted.Add("TPXGU.6");
|
|
|
|
|
|
var sortedList = SortAidList(unsorted);
|
|
|
unsorted.Add(""); // 이 경우, 최상단에 위치해야 함
|
|
|
unsorted.Add("---"); // 이 경우, 최상단에 위치해야 함
|
|
|
unsorted.Add("undef"); // 이 경우, 최상단에 위치해야 함
|
|
|
unsorted.Add("모든 유니트"); // 이 경우, 최상단에 위치해야 함
|
|
|
unsorted.Add("모든유니트"); // 이 경우, 최상단에 위치해야 함
|
|
|
unsorted.Add("TP6GC.9");
|
|
|
unsorted.Add("TP6GC.4");
|
|
|
unsorted.Add("TP3GC.1");
|
|
|
unsorted.Add("TP3GC.16");
|
|
|
unsorted.Add("TP3GC.10");
|
|
|
unsorted.Add("TP3GC.3");
|
|
|
unsorted.Add("TP3GC.1-C1");
|
|
|
unsorted.Add("TP3GC.1-C2");
|
|
|
unsorted.Add("TP3GC.3-C2");
|
|
|
unsorted.Add("TP3GC.3-C20");
|
|
|
unsorted.Add("TP3GC.3-C11");
|
|
|
unsorted.Add("TP3GC.3-C385");
|
|
|
unsorted.Add("TPXGU.5");
|
|
|
unsorted.Add("TPXGU.6");
|
|
|
unsorted.Add("TPXGU.5-W1");
|
|
|
unsorted.Add("TPXGU.6-W1");
|
|
|
unsorted.Add("TPXGU.6-W2");
|
|
|
unsorted.Add("TPXGU.6-C1");
|
|
|
unsorted.Add("TP6GC.9");
|
|
|
unsorted.Add("TP6GC.4");
|
|
|
unsorted.Add("TP3GC.1");
|
|
|
unsorted.Add("TP3GC.16");
|
|
|
unsorted.Add("TP3GC.10");
|
|
|
unsorted.Add("TP3GC.3");
|
|
|
unsorted.Add("TP3GC.1-C1 (RN1-1-1)");
|
|
|
unsorted.Add("TP3GC.1-C2 (RN1-1-2)");
|
|
|
unsorted.Add("TP3GC.3-C2 (RN1-1-3)");
|
|
|
unsorted.Add("TP3GC.3-C20 (RN1-2-1)");
|
|
|
unsorted.Add("TP3GC.3-C11 (RN1-2-1)");
|
|
|
unsorted.Add("TP3GC.3-C385 (RN1-2-2)");
|
|
|
unsorted.Add("TPXGU.5");
|
|
|
unsorted.Add("TPXGU.6");
|
|
|
unsorted.Add("GPXGU.6");
|
|
|
|
|
|
unsorted.Add("PN000101-TP6GC.9");
|
|
|
unsorted.Add("PN000101-TP6GC.4");
|
|
|
unsorted.Add("PN000101-TP3GC.1");
|
|
|
unsorted.Add("PN000101-TP3GC.16");
|
|
|
unsorted.Add("PN000101-TP3GC.10");
|
|
|
unsorted.Add("PN000101-TP3GC.3");
|
|
|
unsorted.Add("PN000102-TP3GC.1-C1");
|
|
|
unsorted.Add("PN000102-GP3GC.1-C2");
|
|
|
unsorted.Add("PN000102-GP3GC.3-C2");
|
|
|
unsorted.Add("PN000102-TP3GC.3-C20");
|
|
|
unsorted.Add("PN000102-TP3GC.3-C11");
|
|
|
unsorted.Add("PN000102-TP3GC.3-C385");
|
|
|
unsorted.Add("PN000102-TPXGU.5");
|
|
|
unsorted.Add("PN000102-TPXGU.6");
|
|
|
unsorted.Add("ON000102-TPXGU.6");
|
|
|
unsorted.Add("ON000102-TPXGU.5");
|
|
|
|
|
|
|
|
|
unsorted.Add("경기도-실험실1-TP6GC.9");
|
|
|
unsorted.Add("경기도-실험실1-TP6GC.4");
|
|
|
unsorted.Add("경기도-실험실1-TP3GC.1");
|
|
|
unsorted.Add("경기도-실험실1-TP3GC.16");
|
|
|
unsorted.Add("경기도-실험실1-TP3GC.10");
|
|
|
unsorted.Add("경기도-실험실1-TP3GC.3");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.1-C1");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.1-C2");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.3-C2");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.3-C20");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.3-C11");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.3-C385");
|
|
|
unsorted.Add("경기도-노보2-TPXGU.5");
|
|
|
unsorted.Add("경기도-노보2-TPXGU.6");
|
|
|
unsorted.Add("갱기도-노보2-TPXGU.6");
|
|
|
|
|
|
var sortedList = SortAidList(unsorted);
|
|
|
sortedList.ForEach(Console.WriteLine); //출력
|
|
|
}
|
|
|
}
|
... | ... | @@ -2732,68 +2908,195 @@ unsorted.Add("TP3GC.3-C2");* |
|
|
// sortedList[5] == "TP3GC.16-C2"*
|
|
|
|
|
|
```c#
|
|
|
class SortAidListBySlotProgram
|
|
|
class SortAidBySlotComparer : IComparer<string>
|
|
|
{
|
|
|
static char[] alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
|
|
|
static string[] undefines = { "", "---", "undef", "모든유니트", "모든 유니트" };
|
|
|
|
|
|
public static int ExtractSlot(string text)
|
|
|
{
|
|
|
int slot;
|
|
|
|
|
|
bool check = int.TryParse(text.ExtractString(".", ""), out slot);
|
|
|
|
|
|
public static List<string> SortAidListBySlot(List<string> unsortedList)
|
|
|
if (!check) { slot = int.Parse(text.ExtractString(".", "-")); }
|
|
|
|
|
|
return slot;
|
|
|
}
|
|
|
|
|
|
public static int? ExtractPortNum(string text)
|
|
|
{
|
|
|
int lowPos = 0;
|
|
|
int? portNumber;
|
|
|
|
|
|
int slotLength = ExtractSlot(text).ToString().Length;
|
|
|
|
|
|
for (int i = 0; i < unsortedList.Count; i++)
|
|
|
string temp = text.ExtractString(".", "");
|
|
|
|
|
|
//port가 없을 때
|
|
|
if (temp.Length == slotLength)
|
|
|
{
|
|
|
lowPos = i;
|
|
|
portNumber = null;
|
|
|
|
|
|
for (int j = i + 1; j < unsortedList.Count; j++)
|
|
|
{
|
|
|
//j,lowPos가 가리키는 값을 담기 위한 변수
|
|
|
int numOfj;
|
|
|
int numOfLowPos;
|
|
|
return portNumber;
|
|
|
}
|
|
|
|
|
|
//port와 remote RN 있을 때
|
|
|
if (temp.Contains("("))
|
|
|
{
|
|
|
temp = temp.ExtractString("-", "(");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
temp = temp.ExtractString("-", "");
|
|
|
}
|
|
|
|
|
|
//'.'이후에 숫자만 있으면 바로 int로 형변환, 숫자와 문자가 섞여있다면 밑에서 ExtractString 이용해서 숫자만 추출
|
|
|
bool isConvertiblej = int.TryParse(unsortedList[j].Split('.').ElementAt(1), out numOfj);
|
|
|
bool isConvertibleLowPos = int.TryParse(unsortedList[lowPos].Split('.').ElementAt(1), out numOfLowPos);
|
|
|
portNumber = int.Parse(temp.TrimStart(alpha));
|
|
|
return portNumber;
|
|
|
}
|
|
|
|
|
|
if (!isConvertiblej) numOfj = int.Parse(ExtractStringProgram.ExtractString(unsortedList[j], ".", "-"));
|
|
|
if (!isConvertibleLowPos) numOfLowPos = int.Parse(ExtractStringProgram.ExtractString(unsortedList[lowPos], ".", "-"));
|
|
|
public static int OrderBySlotAndPort(string x, string y)
|
|
|
{
|
|
|
int xSlot = ExtractSlot(x);
|
|
|
int ySlot = ExtractSlot(y);
|
|
|
|
|
|
//'.' 뒤에 나오는 숫자만 추출해서 비교
|
|
|
if (numOfLowPos > numOfj) lowPos = j;
|
|
|
else if (numOfLowPos == numOfj) //만약 추출한 숫자가 같다면
|
|
|
if (xSlot > ySlot)
|
|
|
{
|
|
|
return 1;
|
|
|
}
|
|
|
else if (xSlot < ySlot)
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
//slot이 같다면 port 대소 비교로 정렬
|
|
|
else
|
|
|
{
|
|
|
//port가 없는 aid 먼저 앞으로 정렬
|
|
|
if (ExtractPortNum(x) == null && ExtractPortNum(y) == null)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
else if (!(ExtractPortNum(x) == null) && ExtractPortNum(y) == null)
|
|
|
{
|
|
|
return 1;
|
|
|
}
|
|
|
else if (ExtractPortNum(x) == null && !(ExtractPortNum(y) == null))
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
//port가 있는 aid 끼리 port number 대소비교
|
|
|
else
|
|
|
{
|
|
|
if (ExtractPortNum(x) > ExtractPortNum(y))
|
|
|
{
|
|
|
//"-C1" 꼴의 문자열이 붙는 요소 끼리만 비교
|
|
|
if (unsortedList[lowPos].Contains("-") && unsortedList[j].Contains("-"))
|
|
|
{
|
|
|
//'.' 뒷 숫자가 동일하고, "-C1"과 "-W1"과 같이 다른 경우 정렬
|
|
|
if (unsortedList[lowPos].Split('-').ElementAt(1).CompareTo(unsortedList[j].Split('-').ElementAt(1)) > 0)
|
|
|
{
|
|
|
lowPos = j;
|
|
|
}
|
|
|
return 1;
|
|
|
}
|
|
|
else if (ExtractPortNum(x) < ExtractPortNum(y))
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
//port number까지 같으면 나머지 문자열 비교
|
|
|
else
|
|
|
{
|
|
|
return x.CompareTo(y);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//"-C1" 꼴에서 숫자만 추출
|
|
|
int restNumOfLowPos = int.Parse(unsortedList[lowPos].Split('-').ElementAt(1).TrimStart(alpha));
|
|
|
int restNumosj = int.Parse(unsortedList[j].Split('-').ElementAt(1).TrimStart(alpha));
|
|
|
public static bool isUndefine(string x)
|
|
|
{
|
|
|
foreach(string undefine in undefines)
|
|
|
{
|
|
|
if (x == undefine) return true;
|
|
|
}
|
|
|
|
|
|
if (restNumOfLowPos > restNumosj)
|
|
|
{
|
|
|
lowPos = j;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
//'.' 뒤의 숫자, '-' 뒤의 문자열까지 같다면,
|
|
|
if (unsortedList[lowPos].Split('-').ElementAt(1).Equals(unsortedList[j].Split('-').ElementAt(1)))
|
|
|
public int Compare(string x, string y)
|
|
|
{
|
|
|
//null 체크
|
|
|
if (x == null && y == null)
|
|
|
{
|
|
|
return 0; //x == y
|
|
|
}
|
|
|
else if (x == null && y != null)
|
|
|
{
|
|
|
return -1; //x < y
|
|
|
}
|
|
|
else if (x != null && y == null)
|
|
|
{
|
|
|
return 1; // x > y
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//'.'이 없는것(" ", "---", "undef", 등등)을 앞으로 보내는 체크
|
|
|
if (isUndefine(x) && isUndefine(y))
|
|
|
{
|
|
|
return x.ExtractString("", ".").CompareTo(y.ExtractString("", "."));
|
|
|
}
|
|
|
else if (isUndefine(x) && !isUndefine(y))
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
else if (!isUndefine(x) && isUndefine(y))
|
|
|
{
|
|
|
return 1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//TID, FullPath 있는 aid들을 뒤로 보내는 부분
|
|
|
if (x.IndexOf('.') == 5 && y.IndexOf('.') == 5)
|
|
|
{
|
|
|
//TID, Fullpath 없는 aid는 바로 slot과 port로 정렬
|
|
|
return OrderBySlotAndPort(x, y);
|
|
|
}
|
|
|
//TID, FullPath 있는 aid와 없는 aid를 비교 시, 없는 aid를 위로 정렬
|
|
|
else if (!(x.IndexOf('.') == 5) && y.IndexOf('.') == 5)
|
|
|
{
|
|
|
return 1;
|
|
|
}
|
|
|
else if (x.IndexOf('.') == 5 && !(y.IndexOf('.') == 5))
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//TID나 FullPath가 있는 aid끼리 비교 시, 처음부터 "-" 까지 비교한다.
|
|
|
if (x.ExtractString("", "-").CompareTo(y.ExtractString("", "-")) == 0)
|
|
|
{
|
|
|
//다만, FullPath는 "-"가 2개이므로 "-"과 "-" 사이도 비교해준다.
|
|
|
if(x.ExtractString("-", "-") != "" && y.ExtractString("-", "-") != "")
|
|
|
{
|
|
|
if (unsortedList[lowPos].Split('.').ElementAt(0).CompareTo(unsortedList[j].Split('.').ElementAt(0)) > 0)
|
|
|
if(x.ExtractString("-", "-") == y.ExtractString("-", "-"))
|
|
|
{
|
|
|
lowPos = j;
|
|
|
return OrderBySlotAndPort(x, y);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return x.CompareTo(y);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return OrderBySlotAndPort(x, y);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return x.CompareTo(y);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
string temp = unsortedList[i]; //swap
|
|
|
unsortedList[i] = unsortedList[lowPos];
|
|
|
unsortedList[lowPos] = temp;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class SortAidProgram
|
|
|
{
|
|
|
|
|
|
public static List<string> SortAidBySlotList(List<string> unsortedList)
|
|
|
{
|
|
|
unsortedList.Sort(new SortAidBySlotComparer());
|
|
|
|
|
|
return unsortedList;
|
|
|
}
|
|
|
|
... | ... | @@ -2801,43 +3104,80 @@ class SortAidListBySlotProgram |
|
|
{
|
|
|
var unsorted = new List<string>();
|
|
|
|
|
|
unsorted.Add("TP6GC.9");
|
|
|
unsorted.Add("TP6GC.4");
|
|
|
unsorted.Add("TP3GC.1");
|
|
|
unsorted.Add("TP3GC.16-C1");
|
|
|
unsorted.Add("TP6GC.16-C1");
|
|
|
unsorted.Add("TPXGU.16-C1");
|
|
|
unsorted.Add("TP3GC.10");
|
|
|
unsorted.Add("TP3GC.3");
|
|
|
unsorted.Add("TP3GC.1-C1");
|
|
|
unsorted.Add("TP3GC.1-C2");
|
|
|
unsorted.Add("TP3GC.3-C2");
|
|
|
unsorted.Add("TP3GC.3-C20");
|
|
|
unsorted.Add("TP3GC.3-C11");
|
|
|
unsorted.Add("TP3GC.3-C385");
|
|
|
unsorted.Add("TPXGU.5");
|
|
|
unsorted.Add("TPXGU.6");
|
|
|
unsorted.Add("TPXGU.5-W1");
|
|
|
unsorted.Add("TPXGU.6-W1");
|
|
|
unsorted.Add("TPXGU.6-C1");
|
|
|
|
|
|
var sortedList = SortAidListBySlot(unsorted);
|
|
|
|
|
|
sortedList.ForEach(Console.WriteLine); //출력
|
|
|
|
|
|
Console.WriteLine();
|
|
|
|
|
|
var unsorted2 = new List<string>();
|
|
|
|
|
|
unsorted2.Add("TP6GC.9-C4");
|
|
|
unsorted2.Add("TP6GC.4-C3");
|
|
|
unsorted2.Add("TP3GC.1-C1");
|
|
|
unsorted2.Add("TP3GC.16-C2");
|
|
|
unsorted2.Add("TP3GC.10-C1");
|
|
|
unsorted2.Add("TP3GC.3-C2");
|
|
|
|
|
|
var sortedList2 = SortAidListBySlot(unsorted2);
|
|
|
|
|
|
unsorted.Add(""); // 이 경우, 최상단에 위치해야 함
|
|
|
unsorted.Add("---"); // 이 경우, 최상단에 위치해야 함
|
|
|
unsorted.Add("undef"); // 이 경우, 최상단에 위치해야 함
|
|
|
unsorted.Add("모든 유니트"); // 이 경우, 최상단에 위치해야 함
|
|
|
unsorted.Add("모든유니트"); // 이 경우, 최상단에 위치해야 함
|
|
|
unsorted.Add("TP6GC.9");
|
|
|
unsorted.Add("TP6GC.4");
|
|
|
unsorted.Add("TP3GC.1");
|
|
|
unsorted.Add("TP3GC.16");
|
|
|
unsorted.Add("TP3GC.10");
|
|
|
unsorted.Add("TP3GC.3");
|
|
|
unsorted.Add("TP3GC.1-C1");
|
|
|
unsorted.Add("TP3GC.1-C2");
|
|
|
unsorted.Add("TP3GC.3-C2");
|
|
|
unsorted.Add("TP3GC.3-C20");
|
|
|
unsorted.Add("TP3GC.3-C11");
|
|
|
unsorted.Add("TP3GC.3-C385");
|
|
|
unsorted.Add("TPXGU.5");
|
|
|
unsorted.Add("TPXGU.6");
|
|
|
unsorted.Add("TPXGU.5-W1");
|
|
|
unsorted.Add("TPXGU.6-W1");
|
|
|
unsorted.Add("TPXGU.6-W2");
|
|
|
unsorted.Add("TPXGU.6-C1");
|
|
|
unsorted.Add("TP6GC.9");
|
|
|
unsorted.Add("TP6GC.4");
|
|
|
unsorted.Add("TP3GC.1");
|
|
|
unsorted.Add("TP3GC.16");
|
|
|
unsorted.Add("TP3GC.10");
|
|
|
unsorted.Add("TP3GC.3");
|
|
|
unsorted.Add("TP3GC.1-C1 (RN1-1-1)");
|
|
|
unsorted.Add("TP3GC.1-C2 (RN1-1-2)");
|
|
|
unsorted.Add("TP3GC.3-C2 (RN1-1-3)");
|
|
|
unsorted.Add("TP3GC.3-C20 (RN1-2-1)");
|
|
|
unsorted.Add("TP3GC.3-C11 (RN1-2-1)");
|
|
|
unsorted.Add("TP3GC.3-C385 (RN1-2-2)");
|
|
|
unsorted.Add("TPXGU.5");
|
|
|
unsorted.Add("TPXGU.6");
|
|
|
unsorted.Add("GPXGU.6");
|
|
|
|
|
|
unsorted.Add("PN000101-TP6GC.9");
|
|
|
unsorted.Add("PN000101-TP6GC.4");
|
|
|
unsorted.Add("PN000101-TP3GC.1");
|
|
|
unsorted.Add("PN000101-TP3GC.16");
|
|
|
unsorted.Add("PN000101-TP3GC.10");
|
|
|
unsorted.Add("PN000101-TP3GC.3");
|
|
|
unsorted.Add("PN000102-TP3GC.1-C1");
|
|
|
unsorted.Add("PN000102-GP3GC.1-C2");
|
|
|
unsorted.Add("PN000102-GP3GC.3-C2");
|
|
|
unsorted.Add("PN000102-TP3GC.3-C20");
|
|
|
unsorted.Add("PN000102-TP3GC.3-C11");
|
|
|
unsorted.Add("PN000102-TP3GC.3-C385");
|
|
|
unsorted.Add("PN000102-TPXGU.5");
|
|
|
unsorted.Add("PN000102-TPXGU.6");
|
|
|
unsorted.Add("ON000102-TPXGU.6");
|
|
|
unsorted.Add("ON000102-TPXGU.5");
|
|
|
|
|
|
|
|
|
unsorted.Add("경기도-실험실1-TP6GC.9");
|
|
|
unsorted.Add("경기도-실험실1-TP6GC.4");
|
|
|
unsorted.Add("경기도-실험실1-TP3GC.1");
|
|
|
unsorted.Add("경기도-실험실1-TP3GC.16");
|
|
|
unsorted.Add("경기도-실험실1-TP3GC.10");
|
|
|
unsorted.Add("경기도-실험실1-TP3GC.3");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.1-C1");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.1-C2");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.3-C2");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.3-C20");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.3-C11");
|
|
|
unsorted.Add("경기도-노보2-TP3GC.3-C385");
|
|
|
unsorted.Add("경기도-노보2-TPXGU.5");
|
|
|
unsorted.Add("경기도-노보2-TPXGU.6");
|
|
|
unsorted.Add("갱기도-노보2-TPXGU.6");
|
|
|
|
|
|
var sortedList2 = SortAidBySlotList(unsorted);
|
|
|
sortedList2.ForEach(Console.WriteLine); //출력
|
|
|
}
|
|
|
}
|
... | ... | |