Files
Unimarc/unimarc/unimarc/마크/Marc_Macro_Sub.cs
SeungHo Yang 38df437422 =====* UniMarc [0.0159] 버전 업데이트 내용 *=====
** ERP 작업 전면 중단 (마크우선) **

1. 마크 추가
ㄴ> 코리스에서 마크 가져오는 폼 새로 추가 (AddMarcFillBlank.cs)
ㄴ> 저장쪽에서 생기는 이슈사항 하드코딩으로 임시 해결.

2. 코리스 마크 가져오는 폼 추가하면서 기존에 있던 버그 수정완료.

3. DB접속 방법 변경.
코드 내 명시되어있던 아이피가 거슬려서 감춘것뿐.

4. 매크로 (현재 55건)
ㄴ> 기존에 그냥 반출하던 방식을 바꿔서 매크로를 적용후 반출하여 파일로 저장하는 방식으로 변경됨.
ㄴ> 추가 요청사항시 업데이트가 필요함.

5. DLS 복본조사
ㄴ> DLS 접속방침이 변경됨에 따라 업데이트가 불가피하여 방식을 변경함.
ㄴ> 바로 URL로 이동하는 방식을 웹페이지내 버튼을 클릭하여 이동하는 방식으로 변경함.

6. 마크 칸채우기
ㄴ> 검색시 여러건이 나옴에 따라 기존에  맨 윗목록만 클릭하던 방식을 변형하여 원하는 목록을 클릭하면 자동으로 마크창으로 이동시켜주게 변경.
2022-09-14 17:46:50 +09:00

704 lines
25 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using WindowsFormsApp1;
namespace UniMarc.
{
internal class Macro_Gudu
{
String_Text st = new String_Text();
public Macro_Gudu() { }
public Macro_Gudu(string fileType)
{
FileType = fileType;
}
public string[,] MacroList = { // 55
{ "0", "020", "$c앞에 : 입력" },
{ "1", "110", ". 한칸 뒤에 $b삽입 (710과 비교)" },
{ "2", "245", "두번째 $a앞에 : 입력" },
{ "3", "245", "$b앞에 : 입력" },
{ "4", "245", "$n앞에 , 입력" },
{ "5", "245", "$x앞에 = 입력" },
{ "6", "245", "$d앞에 / 입력" },
{ "7", "245", "$d앞에 ,, 를 ,로 변경" },
{ "8", "245", "$p 앞에 $n이 나온 경우 , 적용, $p앞에 $n이 없는 경우 . 적용" },
{ "9", "245", "$e 앞에 , 적용" },
{ "10", "246", "$i뒤의 :뒤를 띄움" },
{ "11", "246", "$b앞에 : 입력" },
{ "12", "246", "$n앞에 . 입력" },
{ "13", "246", "$p 앞에 $n이 나온 경우 , 적용, $p앞에 $n이 없는 경우 . 적용" },
{ "14", "246", "$g앞에 \" \" 입력" },
{ "15", "260", "두 번째 $a앞에 ; 입력" },
{ "16", "260", "$b앞에 : 입력" },
{ "17", "260", "$c앞에 , 입력" },
{ "18", "300", "$b앞에 : 입력" },
{ "19", "300", "$c 앞에 ; 입력" },
{ "20", "300", "$e 앞에 + 입력" },
{ "21", "440", "$n앞에 . 입력" },
{ "22", "440", "$p 앞에 $n이 나온 경우 , 적용, $p앞에 $n이 없는 경우 . 적용" },
{ "23", "440", "$v앞에 ; 입력" },
{ "24", "440", "$x앞에 = 입력" },
{ "25", "830", "$n앞에 . 입력" },
{ "26", "830", "$p 앞에 $n이 나온 경우 , 적용, $p앞에 $n이 없는 경우 . 적용" },
{ "27", "830", "$v앞에 ; 입력" },
{ "28", "082", "태그삭제" },
{ "29", "111", "태그삭제" },
{ "30", "520", "태그삭제" },
{ "31", "536", "태그삭제" },
{ "32", "546", "태그삭제" },
{ "33", "650", "태그삭제" },
{ "34", "049", "지시기호 [0 ]으로 수정" },
{ "35", "100", "지시기호 [1 ]으로 수정" },
{ "36", "100", "지시기호 [ ]으로 수정" },
{ "37", "490", "지시기호 [10]으로 수정" },
{ "38", "500", "지시기호 [ ]으로 수정" },
{ "39", "505", "지시기호 [00]으로 수정" },
{ "40", "700", "지시기호 [1 ]으로 수정" },
{ "41", "710", "지시기호 [ ]으로 수정" },
{ "42", "740", "지시기호 [02]으로 수정" },
{ "43", "830", "지시기호 [ 0]으로 수정" },
{ "44", "900", "지시기호 [10]으로 수정" },
{ "45", "910", "지시기호 [ 0]으로 수정" },
{ "46", "940", "지시기호 [0 ]으로 수정" },
{ "47", "950", "지시기호 [0 ]으로 수정" },
{ "48", "245", "245가 괄호 시작일 경우 [20], 괄호 시작이 아니며 100이나 110태그 사용시 [10], 해당 없을시 [00]" },
/////////
// { "49", "245", "245b -> 740a로 복사" },
// { "50", "440", "440a -> 490a, 830a로 각각 복사" },
// { "51", "440", "440x -> 490a로 복사" },
// { "52", "440", "440n p x -> 490v [p-n-v 순서]로 변환" },
// { "53", "440", "440n p x -> 830 n p v로 변환" },
//
// { "54", "525", "525a를 500a로 부출 후 삭제" },
};
string TargetMarc;
bool isAuthorTag = false;
public string FileType = "ANSI";
public string MacroMarc(string ViewMarc, List<string> idx)
{
return RunningMacro(ViewMarc, idx.ToArray());
}
public string MacroMarc(string ViewMarc, string[] idx)
{
return RunningMacro(ViewMarc, idx);
}
private string RunningMacro(string ViewMarc, string[] idx)
{
List<string> SplitMarc = new List<string>(ViewMarc.Split('\n'));
for (int a = 0; a < SplitMarc.Count; a++)
{
isAuthorTag = false;
if (SplitMarc[a].Length < 2) continue;
string ContentTag = SplitMarc[a].Substring(0, 3);
TargetMarc = ViewMarc;
SplitMarc[a] = Macro_Index(idx, ContentTag, SplitMarc[a]);
}
// 반출용 마크로 변환
return st.made_Ori_marc(String.Join("\n", SplitMarc));
}
private string Macro_Index(string[] idx, string ContentTag, string Content)
{
string Target = Content;
foreach (string i in idx)
{
switch (ContentTag)
{
case "020": Target = Index_020(i, Target.Split('▼')); break;
case "049": Target = Index_049(i, Target.Split('▼')); break;
case "082": Target = Index_082(i, Target.Split('▼')); break;
case "100": Target = Index_100(i, Target.Split('▼')); break;
case "110": Target = Index_110(i, Target.Split('▼')); break;
case "111": Target = Index_111(i, Target.Split('▼')); break;
case "245": Target = Index_245(i, Target.Split('▼')); break;
case "246": Target = Index_246(i, Target.Split('▼')); break;
case "260": Target = Index_260(i, Target.Split('▼')); break;
case "300": Target = Index_300(i, Target.Split('▼')); break;
case "440": Target = Index_440(i, Target.Split('▼')); break;
case "490": Target = Index_490(i, Target.Split('▼')); break;
case "500": Target = Index_500(i, Target.Split('▼')); break;
case "505": Target = Index_505(i, Target.Split('▼')); break;
case "520": Target = Index_520(i, Target.Split('▼')); break;
case "536": Target = Index_536(i, Target.Split('▼')); break;
case "546": Target = Index_546(i, Target.Split('▼')); break;
case "650": Target = Index_650(i, Target.Split('▼')); break;
case "700": Target = Index_700(i, Target.Split('▼')); break;
case "710": Target = Index_710(i, Target.Split('▼')); break;
case "740": Target = Index_740(i, Target.Split('▼')); break;
case "830": Target = Index_830(i, Target.Split('▼')); break;
case "900": Target = Index_900(i, Target.Split('▼')); break;
case "910": Target = Index_910(i, Target.Split('▼')); break;
case "940": Target = Index_940(i, Target.Split('▼')); break;
case "950": Target = Index_950(i, Target.Split('▼')); break;
}
}
return Target;
}
/// <summary>
/// 020 매크로
/// </summary>
/// <param name="SplitContent">020 태그 내용</param>
/// <returns>020태그 매크로 적용된 내용</returns>
private string Index_020(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
// $c 앞에 $g가 있을 경우 $c 앞에 ":"
if (SplitContent[a].StartsWith("c") && idx == "0")
if (SplitContent[a - 1].StartsWith("g"))
if (!SplitContent[a - 1].EndsWith(":"))
SplitContent[a - 1] += ":";
}
return string.Join("▼", SplitContent);
}
/// <summary>
/// 049 매크로
/// </summary>
/// <param name="SplitContent">태그 내용</param>
/// <returns>매크로 적용된 내용</returns>
private string Index_049(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "34") SplitContent[a] = "0 ";
}
return string.Join("▼", SplitContent);
}
/// <summary>
/// 082 매크로
/// </summary>
/// <param name="SplitContent">082 태그 내용</param>
/// <returns>082태그 매크로 적용된 내용</returns>
private string Index_082(string idx, string[] SplitContent)
{
if (idx == "28")
return "";
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
}
return string.Join("▼", SplitContent);
}
private string Index_100(string idx, string[] SplitContent)
{
isAuthorTag = true;
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "35") SplitContent[a] = "1 ";
if (a == 0 && idx == "36") SplitContent[a] = " ";
}
return string.Join("▼", SplitContent);
}
/// <summary>
/// 110 매크로
/// </summary>
/// <param name="Content">110태그 내용</param>
/// <returns>110태그 매크로 적용된 내용</returns>
private string Index_110(string idx, string[] SplitContent)
{
isAuthorTag = true;
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
if (idx == "1")
{
// $a 뒤에 $b가 있는 경우 $b앞에 "."
if (SplitContent[a].StartsWith("b"))
if (SplitContent[a - 1].StartsWith("a"))
if (!SplitContent[a - 1].EndsWith("."))
SplitContent[a - 1] += ".";
// $b 뒤에 $b가 있는 경우 $b앞에 "."
if (SplitContent[a].StartsWith("b"))
if (SplitContent[a - 1].StartsWith("b"))
if (!SplitContent[a - 1].EndsWith("."))
SplitContent[a - 1] += ".";
}
}
return string.Join("▼", SplitContent);
}
/// <summary>
/// 111 매크로
/// </summary>
/// <param name="Content">태그 내용</param>
/// <returns>매크로 적용된 내용</returns>
private string Index_111(string idx, string[] SplitContent)
{
if (idx == "29")
return "";
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
}
return string.Join("▼", SplitContent);
}
/// <summary>
/// 245 매크로 적용
/// </summary>
/// <param name="Content">245태그 내용</param>
/// <returns>245태그 매크로 적용된 내용</returns>
private string Index_245(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
if (SplitContent[a].StartsWith("a") && idx == "48")
{
if (SplitContent[a].Contains("("))
SplitContent[0] = "20";
else if (isAuthorTag)
SplitContent[0] = "10";
else
SplitContent[0] = "00";
}
// 두번째 $a 앞에 ":"
if (SplitContent[a - 1].StartsWith("a") && idx == "2")
if (SplitContent[a].StartsWith("a"))
if (!SplitContent[a - 1].EndsWith(":"))
SplitContent[a - 1] += ":";
// $b 앞에 ":"적용
if (SplitContent[a].StartsWith("b") && idx == "3")
if (!SplitContent[a - 1].EndsWith(":"))
SplitContent[a - 1] += ":";
// $n 앞에 "," 적용
if (SplitContent[a].StartsWith("n") && idx == "4")
if (!SplitContent[a - 1].EndsWith(","))
SplitContent[a - 1] += ",";
// $d 앞에 "/" 적용
if (SplitContent[a].StartsWith("d") && idx == "6")
if (!SplitContent[a - 1].EndsWith("/"))
SplitContent[a - 1] += "/";
// $d앞에 ,, 를 ,로 변경
if (SplitContent[a].StartsWith("d") && idx == "7")
SplitContent[a] = SplitContent[a].Replace(",,", ",");
// $p 앞에 $n이 나온 경우 "," 적용, $p앞에 $n이 없는 경우 "." 적용
if (SplitContent[a].StartsWith("p") && idx == "8")
{
if (SplitContent[a - 1].StartsWith("n"))
{
if (!SplitContent[a - 1].EndsWith(","))
SplitContent[a - 1] += ",";
}
else
{
if (!SplitContent[a - 1].EndsWith("."))
SplitContent[a - 1] += ".";
}
}
// $x 앞에 "=" 적용
if (SplitContent[a].StartsWith("x") && idx == "5")
if (!SplitContent[a - 1].EndsWith("="))
SplitContent[a - 1] += "=";
// $e 앞에 "," 적용
if (SplitContent[a].StartsWith("e") && idx == "9")
if (!SplitContent[a - 1].EndsWith(","))
SplitContent[a - 1] += ",";
}
return string.Join("▼", SplitContent);
}
/// <summary>
/// 246 매크로 적용
/// </summary>
/// <param name="Content">245태그 내용</param>
/// <returns>245태그 매크로 적용된 내용</returns>
private string Index_246(string idx, string[] SplitContent)
{
char[] Gudo = { ';', ':', '.', ',', '/' };
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
// $a 앞에 $i가 나온경우 $a 앞에 ":"적용
if (SplitContent[a].StartsWith("a") && idx == "10")
if (SplitContent[a - 1].StartsWith("i"))
if (!SplitContent[a - 1].EndsWith(":"))
SplitContent[a - 1] += ":";
// $b 앞에는 ":"적용
if (SplitContent[a].StartsWith("b") && idx == "11")
if (!SplitContent[a - 1].EndsWith(":"))
SplitContent[a - 1] += ":";
// $n 앞에는 "." 적용
if (SplitContent[a].StartsWith("n") && idx == "12")
if (!SplitContent[a - 1].EndsWith("."))
SplitContent[a - 1] += ".";
// $p 앞에 $n이 나온 경우 "," 적용, $p앞에 $n이 없는 경우 "."적용
if (SplitContent[a].StartsWith("p") && idx == "13")
{
if (SplitContent[a - 1].StartsWith("n"))
{
if (!SplitContent[a - 1].EndsWith(","))
SplitContent[a - 1] += ",";
}
else
{
if (!SplitContent[a - 1].EndsWith("."))
SplitContent[a - 1] += ".";
}
}
// $g 앞에는 ""
if (SplitContent[a].StartsWith("g") && idx == "14")
{
SplitContent[a - 1].TrimEnd(Gudo);
SplitContent[a - 1].TrimEnd(' ');
}
}
return string.Join("▼", SplitContent);
}
private string Index_260(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
// 두번째 $a 앞에 ";"
if (SplitContent[a].StartsWith("a") && idx == "15")
if (!SplitContent[a - 1].EndsWith(";"))
SplitContent[a - 1] += ";";
// $b 앞에는 ":" 적용
if (SplitContent[a].StartsWith("b") && idx == "16")
if (!SplitContent[a - 1].EndsWith(":"))
SplitContent[a - 1] += ":";
// $c 앞에는 "," 적용
if (SplitContent[a].StartsWith("c") && idx == "17")
if (!SplitContent[a - 1].EndsWith(","))
SplitContent[a - 1] += ",";
}
return string.Join("▼", SplitContent);
}
private string Index_300(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
// $b 앞에는 ":" 적용
if (SplitContent[a].StartsWith("b") && idx == "18")
if (!SplitContent[a - 1].EndsWith(":"))
SplitContent[a - 1] += ":";
// $c 앞에는 ";" 적용
if (SplitContent[a].StartsWith("c") && idx == "19")
if (!SplitContent[a - 1].EndsWith(";"))
SplitContent[a - 1] += ";";
// $e 앞에는 "+" 적용
if (SplitContent[a].StartsWith("e") && idx == "20")
if (!SplitContent[a - 1].EndsWith("+"))
SplitContent[a - 1] += "+";
}
return string.Join("▼", SplitContent);
}
private string Index_440(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
// $n 앞에는 "." 적용
if (SplitContent[a].StartsWith("n") && idx == "21")
if (!SplitContent[a - 1].EndsWith("."))
SplitContent[a - 1] += ".";
// $p 앞에 $n이 나온 경우 "," 적용, $p앞에 $n이 없는 경우 "."적용
if (SplitContent[a].StartsWith("p") && idx == "22")
{
if (SplitContent[a - 1].StartsWith("n"))
{
if (SplitContent[a - 1].EndsWith(","))
SplitContent[a - 1] += ",";
}
else
{
if (SplitContent[a - 1].EndsWith("."))
SplitContent[a - 1] += ".";
}
}
// $v 앞에는 ";" 적용
if (SplitContent[a].StartsWith("v") && idx == "23")
if (!SplitContent[a - 1].EndsWith(";"))
SplitContent[a - 1] += ";";
// $x 앞에는 "=" 적용
if (SplitContent[a].StartsWith("x") && idx == "24")
if (!SplitContent[a - 1].EndsWith("="))
SplitContent[a - 1] += "=";
}
return string.Join("▼", SplitContent);
}
private string Index_490(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "37") SplitContent[a] = "10";
}
return string.Join("▼", SplitContent);
}
private string Index_500(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "38") SplitContent[a] = " ";
}
return string.Join("▼", SplitContent);
}
private string Index_505(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "39") SplitContent[a] = "00";
}
return string.Join("▼", SplitContent);
}
private string Index_520(string idx, string[] SplitContent)
{
if (idx == "30") return "";
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
}
return string.Join("▼", SplitContent);
}
private string Index_536(string idx, string[] SplitContent)
{
if (idx == "31") return "";
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
}
return string.Join("▼", SplitContent);
}
private string Index_546(string idx, string[] SplitContent)
{
if (idx == "32") return "";
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
}
return string.Join("▼", SplitContent);
}
private string Index_650(string idx, string[] SplitContent)
{
if (idx == "33") return "";
for (int a = 0; a < SplitContent.Length; a++) {
if (a <= 1) continue;
}
return string.Join("▼", SplitContent);
}
private string Index_700(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "40") SplitContent[a] = "1 ";
}
return string.Join("▼", SplitContent);
}
private string Index_710(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "41") SplitContent[a] = " ";
}
return string.Join("▼", SplitContent);
}
private string Index_740(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "42") SplitContent[a] = "02";
}
return string.Join("▼", SplitContent);
}
private string Index_830(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
if (a == 0 && idx == "43") SplitContent[a] = " 0";
// $n 앞에는 "." 적용
if (SplitContent[a].StartsWith("n") && idx == "25")
if (!SplitContent[a - 1].EndsWith("."))
SplitContent[a - 1] += ".";
// $p 앞에 $n이 나온 경우 "," 적용, $p앞에 $n이 없는 경우 "."적용
if (SplitContent[a].StartsWith("p") && idx == "26")
{
if (SplitContent[a - 1].StartsWith("n"))
{
if (SplitContent[a - 1].EndsWith(","))
SplitContent[a - 1] += ",";
}
else
{
if (SplitContent[a - 1].EndsWith("."))
SplitContent[a - 1] += ".";
}
}
// $v 앞에는 ";" 적용
if (SplitContent[a].StartsWith("v") && idx == "27")
if (!SplitContent[a - 1].EndsWith(";"))
SplitContent[a - 1] += ";";
}
return string.Join("▼", SplitContent);
}
private string Index_900(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "44") SplitContent[a] = "10";
}
return string.Join("▼", SplitContent);
}
private string Index_910(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "45") SplitContent[a] = " 0";
}
return string.Join("▼", SplitContent);
}
private string Index_940(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "46") SplitContent[a] = "0 ";
}
return string.Join("▼", SplitContent);
}
private string Index_950(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= -1) continue;
if (a == 0 && idx == "47") SplitContent[a] = "0 ";
}
return string.Join("▼", SplitContent);
}
}
}