Files
Unimarc/unimarc/unimarc/마크/Marc_Macro_Sub.cs

1243 lines
48 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using System.Diagnostics;
using System.Windows.Forms;
using WindowsFormsApp1;
using AR;
namespace UniMarc.
{
public class Macro
{
public string mIDX;
public string mTagArr;
public string mRuncode;
public Macro(string pIDX, string pTagArr, string pRuncode)
{
mIDX = pIDX;
mTagArr = pTagArr;
mRuncode = pRuncode;
}
}
internal class Macro_Gudu
{
String_Text st = new String_Text();
Helper_DB db;
public Macro_Gudu(Helper_DB db)
{
this.db = db;
}
bool isAuthorTag = false;
string Author_Idx_6768 = "";
public string FileType = "ANSI";
public string MacroMarc(string ViewMarc, List<string> idx, List<string> TagArray, List<string> RunCode)
{
return RunningMacro(ViewMarc, idx.ToArray(), TagArray.ToArray(), RunCode.ToArray());
}
public string MacroMarc(string ViewMarc, string[] idx, string[] TagArray, string[] RunCode)
{
return RunningMacro(ViewMarc, idx, TagArray, RunCode);
}
public string MacroMarc(string ViewMarc, List<Macro> pMacroList)
{
return NewRunningMacro(ViewMarc, pMacroList);
}
private string NewRunningMacro(string ViewMarc, List<Macro> pMacroList)
{
List<string> tSplitMarc;//= new List<string>(ViewMarc.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries));
List<Macro> tMacroList = pMacroList;
string tMacroData = string.Empty;
string tContentTag = string.Empty;
for (int i = 0; i < tMacroList.Count; i++)
{
if (tMacroList[i].mRuncode == "etc" || tMacroList[i].mRuncode.Contains("jisi") || (tMacroList[i].mRuncode.Contains("del") && !tMacroList[i].mRuncode.Contains("/")))
{
if ((tMacroList[i].mIDX == "110" || tMacroList[i].mIDX == "111" || tMacroList[i].mIDX == "112")
&& (tMacroList[i].mTagArr == "256" || tMacroList[i].mTagArr == "500")
&& tMacroList[i].mRuncode == "etc")
{
ViewMarc = AddMarcMacro(tMacroList[i].mIDX, ViewMarc);//etc 추가처리 110,111,112
}
else
{
tSplitMarc = new List<string>(ViewMarc.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries));
for (int j = 0; j < tSplitMarc.Count; j++)
{
if (tSplitMarc[j].Length < 2) continue;
tContentTag = tSplitMarc[j].Substring(0, 3);
tMacroData = Macro_Index(tMacroList[i].mIDX, tMacroList[i].mTagArr, tMacroList[i].mRuncode, tContentTag, tSplitMarc[j]);//etc 처리 부분 및 지시 코드 변경
tSplitMarc[j] = tMacroData;
}
tSplitMarc.RemoveAll(x => x == "");
ViewMarc = String.Join("\n", tSplitMarc);
}
}
else
{
ViewMarc = ChangeTagByIndex(tMacroList[i].mIDX, tMacroList[i].mTagArr, tMacroList[i].mRuncode, ViewMarc);
}
}
// 반출용 마크로 변환
return st.made_Ori_marc(ViewMarc);
}
private string RunningMacro(string ViewMarc, string[] idx, string[] TagArray, string[] RunCode)
{
List<string> SplitMarc = new List<string>(ViewMarc.Split('\n'));
for (int a = 0; a < SplitMarc.Count; a++)
{
if (SplitMarc[a].Length < 2) continue;
string ContentTag = SplitMarc[a].Substring(0, 3);
string MacroData = Macro_Index(idx, TagArray, RunCode, ContentTag, SplitMarc[a]);//etc 처리 부분 및 지시 코드 변경
SplitMarc[a] = MacroData;
}
List<string> result = new List<string>();
foreach (string Macro in SplitMarc)
{
if (Macro == "")
continue;
result.Add(Macro);
}
ViewMarc = String.Join("\n", result);
for (int a = 0; a < idx.Length; a++)
{
ViewMarc = ChangeTagByIndex(idx[a], TagArray[a], RunCode[a], ViewMarc);
ViewMarc = AddMarcMacro(idx[a], ViewMarc);//etc 추가처리 110,111,112
}
// 반출용 마크로 변환
return st.made_Ori_marc(ViewMarc);
}
private string AddMarcMacro(string idx, string ViewMarc)
{
// 500a "이 도서는 창비 '더책' 오디오 기능이 포함되어 있음" 추가
if (idx == "110")
ViewMarc = st.AddTagInMarc("500\t \t▼a이 도서는 창비 '더책' 오디오 기능이 포함되어 있음.▲", ViewMarc);
// 256a "e-Book" 추가
if (idx == "111")
ViewMarc = st.AddTagInMarc("256\t \t▼ae-Book", ViewMarc);
// 500a "URL 링크 클릭한 후 전자도서 홈페이지에서 로그인하여 이용하시기 바랍니다" 추가
if (idx == "112")
ViewMarc = st.AddTagInMarc("500\t \t▼aURL 링크 클릭한 후 전자도서 홈페이지에서 로그인하여 이용하시기 바랍니다.▲", ViewMarc);
return ViewMarc;
}
private string ChangeTagByIndex(string idx, string TagNum, string RunCode, string ViewMarc)
{
#region
// 440n p x -> 490v [p-n-v 순서]로 변환 / 440n p x -> 830 n p v로 변환
if (idx == "56" || idx == "57")
{
ViewMarc = Sub_440npv(ViewMarc, idx);
return ViewMarc;
}
#endregion
if (RunCode.IndexOf("/") < 0) return ViewMarc;
bool isDelete = RunCode.Contains("del");
string[] CodeSplit = RunCode.Split('/');
string TargetTagNum = CodeSplit[0].Substring(0, 3);
string TargetTag = CodeSplit[0].Substring(3, 1);
string MoveTagNum = CodeSplit[1].Substring(0, 3);
string MoveTag = CodeSplit[1].Substring(3, 1);
ViewMarc = TagToOtherTag(TargetTagNum, TargetTag, MoveTagNum, MoveTag, ViewMarc, isDelete);
#region ( )
/*
// 525a를 500a로 부출 후 삭제
if (idx == "49")
ViewMarc = TagToOtherTag("525", "a", "500", "a", ViewMarc, true);
// 440a를 830a로 복사
if (idx == "50")
ViewMarc = TagToOtherTag("440", "a", "830", "a", ViewMarc);
// 440x를 490a로 복사
if (idx == "51")
ViewMarc = TagToOtherTag("440", "a", "490", "a", ViewMarc);
// 049v를 090c로 복사
if (idx == "52")
ViewMarc = TagToOtherTag("049", "v", "090", "c", ViewMarc);
// 020c를 950b로 복사
if (idx == "53")
ViewMarc = TagToOtherTag("020", "c", "950", "b", ViewMarc);
// 245b -> 740a로 복사
if (idx == "58")
ViewMarc = TagToOtherTag("245", "b", "740", "a", ViewMarc);
// 245p -> 740a로 복사
if (idx == "62")
ViewMarc = TagToOtherTag("245", "p", "740", "a", ViewMarc);
// 900a -> 700a로 복사
if (idx == "65")
ViewMarc = TagToOtherTag("900", "a", "700", "a", ViewMarc, true);
// 910a -> 710a로 복사
if (idx == "66")
ViewMarc = TagToOtherTag("910", "a", "710", "a", ViewMarc, true);
*/
#endregion
return ViewMarc;
}
#region ChangeTagByIndex_SUB
private string Sub_440npv(string ViewMarc, string idx)
{
string oriMarc = st.made_Ori_marc(ViewMarc);
string[] TakeMarc = { "440a", "440n", "440p", "440v" };
string[] TakeTag = st.Take_Tag(oriMarc, TakeMarc);
if (TakeTag[0] == "")
return ViewMarc;
if (idx == "56") // 440 a n p v -> 490a 490v [p-n-v 순서]로 변환
{
// 구분 ,
string Tag = "490\t \t";
string Content = "";
if (TakeTag[0] != "")
Tag += "▼a" + TakeTag[0];
if (TakeTag[1] == "" && TakeTag[2] == "" && TakeTag[3] == "")
{
Tag += "▲";
return st.AddTagInMarc(Tag, ViewMarc);
}
Tag += "▼v";
if (TakeTag[2] != "")
Content += TakeTag[2] + "-";
if (TakeTag[1] != "")
Content += TakeTag[1] + "-";
if (TakeTag[3] != "")
Content += TakeTag[3];
Content = Content.TrimEnd('-');
Tag += Content + "▲";
ViewMarc = st.AddTagInMarc(Tag, ViewMarc);
}
if (idx == "57") // 440 a n p v -> 830 a n p v로 변환
{
string Tag = string.Format("830\t \t");
if (TakeTag[0] != "")
Tag += "▼a" + TakeTag[0];
if (TakeTag[1] != "")
Tag += "▼n" + TakeTag[1];
if (TakeTag[2] != "")
Tag += "▼p" + TakeTag[2];
if (TakeTag[3] != "")
Tag += "▼v" + TakeTag[3];
Tag += "▲";
ViewMarc = st.AddTagInMarc(Tag, ViewMarc);
}
return ViewMarc;
}
#endregion
private string Macro_Index(string[] index, string[] TagArray, string[] RunCode, string ContentTag, string Content)
{
string[] SplitContent = Content.Split('\t');
string Jisi = SplitContent[1];
string Target = SplitContent[2];
int cout = 0;
foreach (string idx in index)
{
Jisi = ChangeJisi(idx, RunCode[cout], TagArray[cout], ContentTag, Jisi, Target);
if (RunCode[cout] == "del")
{
if (TagArray[cout] == ContentTag)
{
Target = "";
break;
}
}
if (ContentTag == "020" && Jisi == "1 " && idx == "75")
{
Target = "";
}
switch (ContentTag)
{
case "020": Target = Index_020(idx, Target.Split('▼')); break;//63,71,0
case "049": Target = Index_049(idx, Target.Split('▼')); break;//79
case "056": Target = Index_056(idx, Target.Split('▼')); break;//86,87,88
case "100": Target = Index_100(idx, Target.Split('▼')); isAuthorTag = true; break;//67
case "110": Target = Index_110(idx, Target.Split('▼')); isAuthorTag = true; break;//68,1
case "111": Target = Index_111(idx, Target.Split('▼')); break;//작업없음
case "245": Target = Index_245(idx, Target.Split('▼')); break;//
case "246": Target = Index_246(idx, Target.Split('▼')); break;
case "250": Target = Index_250(idx, Target.Split('▼')); break;
case "256": Target = Index_256(idx, Target.Split('▼')); break;//작업없음
case "260": Target = Index_260(idx, Target.Split('▼')); break;
case "300": Target = Index_300(idx, Target.Split('▼')); break;
case "440": Target = Index_440(idx, Target.Split('▼')); break;
case "500": Target = Index_500(idx, Target.Split('▼')); break;
case "700": Target = Index_700(idx, Target.Split('▼')); break;
case "710": Target = Index_710(idx, Target.Split('▼')); break;
case "830": Target = Index_830(idx, Target.Split('▼')); break;
case "950": Target = Index_950(idx, Target.Split('▼')); break;
}
cout++;
}
if (Target == "" || !Target.Contains("▲"))
return "";
return string.Format("{0}\t{1}\t{2}", ContentTag, Jisi, Target);
}
private string Macro_Index(string pIdx, string TagArray, string RunCode, string ContentTag, string Content)
{
string[] SplitContent = Content.Split('\t');
string Jisi = SplitContent[1];
string Target = SplitContent[2];
int cout = 0;
Jisi = ChangeJisi(pIdx, RunCode, TagArray, ContentTag, Jisi, Target);
if (RunCode == "del")
{
if (TagArray == ContentTag)
{
Target = "";
}
}
if (ContentTag == "020" && Jisi == "1 " && pIdx == "75")
{
Target = "";
}
//string[] tData = Target.Split(new string[] { "▼" }, StringSplitOptions.RemoveEmptyEntries);
switch (ContentTag)
{
case "020": Target = Index_020(pIdx, Target.Split('▼')); break;//63,71,0
case "049": Target = Index_049(pIdx, Target.Split('▼')); break;//79
case "056": Target = Index_056(pIdx, Target.Split('▼')); break;//86,87,88
case "100": Target = Index_100(pIdx, Target.Split('▼')); isAuthorTag = true; break;//67
case "110": Target = Index_110(pIdx, Target.Split('▼')); isAuthorTag = true; break;//68,1
case "111": Target = Index_111(pIdx, Target.Split('▼')); break;//작업없음
case "245": Target = Index_245(pIdx, Target.Split('▼')); break;//
case "246": Target = Index_246(pIdx, Target.Split('▼')); break;
case "250": Target = Index_250(pIdx, Target.Split('▼')); break;
case "256": Target = Index_256(pIdx, Target.Split('▼')); break;//작업없음
case "260": Target = Index_260(pIdx, Target.Split('▼')); break;
case "300": Target = Index_300(pIdx, Target.Split('▼')); break;
case "440": Target = Index_440(pIdx, Target.Split('▼')); break;
case "500": Target = Index_500(pIdx, Target.Split('▼')); break;
case "700": Target = Index_700(pIdx, Target.Split('▼')); break;
case "710": Target = Index_710(pIdx, Target.Split('▼')); break;
case "830": Target = Index_830(pIdx, Target.Split('▼')); break;
case "950": Target = Index_950(pIdx, Target.Split('▼')); break;
}
if (Target == "" || !Target.Contains("▲"))
return "";
return string.Format("{0}\t{1}\t{2}", ContentTag, Jisi, Target);
}
string ChangeJisi(string idx, string RunCode, string TargetTagNum, string RoofTagNum, string Jisi, string Content)
{
if (!RunCode.Contains("jisi")) return Jisi;
if (idx == "48" && RoofTagNum == "245") return JiSi245(Content);
if (idx == "70" && RoofTagNum == "440") return JiSi440(Content);
if (TargetTagNum == RoofTagNum) return RunCode.Substring(0, 2);
#region ( )
/*
if (idx == "34" && RoofTagNum == "049") return "0 ";
if (idx == "35" && RoofTagNum == "100") return "1 ";
if (idx == "36" && RoofTagNum == "110") return " ";
if (idx == "37" && RoofTagNum == "490") return "10";
if (idx == "38" && RoofTagNum == "500") return " ";
if (idx == "39" && RoofTagNum == "505") return "00";
if (idx == "40" && RoofTagNum == "700") return "1 ";
if (idx == "41" && RoofTagNum == "710") return " ";
if (idx == "42" && RoofTagNum == "740") return "02";
if (idx == "43" && RoofTagNum == "830") return " 0";
if (idx == "44" && RoofTagNum == "900") return "10";
if (idx == "45" && RoofTagNum == "910") return " 0";
if (idx == "46" && RoofTagNum == "940") return "0 ";
if (idx == "47" && RoofTagNum == "950") return "0 ";
*/
#endregion
return Jisi;
}
#region JISI_SUB
/// <summary>
/// 245가 괄호 시작일 경우 [20], 괄호 시작이 아니며 100이나 110태그 사용시 [10], 해당 없을시 [00]
/// </summary>
/// <param name="Content"></param>
/// <returns></returns>
string JiSi245(string Content)
{
if (Content.StartsWith("▼a"))
{
Content = Content.Replace("▼a", "");
if (Content.StartsWith("("))
return "20";
else if (isAuthorTag)
return "10";
}
return "00";
}
/// <summary>
/// 440가 괄호 시작일 경우 [10], 괄호 시작이 아니면 [00]
/// </summary>
/// <param name="Content"></param>
/// <returns></returns>
string JiSi440(string Content)
{
if (Content.StartsWith("▼a"))
{
Content = Content.Replace("▼a", "");
if (Content.StartsWith("("))
return "10";
}
return "00";
}
#endregion
#region IDX TAG NUM
/// <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 (SplitContent[a].StartsWith("c"))
{
if (idx == "63") // $c 원표시 제거
SplitContent[a] = SplitContent[a].Replace("\\", "");
if (idx == "71") // $b 원표시 추가
SplitContent[a] = SplitContent[a].Insert(1, "\\");
}
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="Content">태그 내용</param>
/// <returns>태그 매크로 적용된 내용</returns>
private string Index_049(string idx, string[] SplitContent)
{
List<string> TMP = new List<string>(SplitContent);
for (int a = 0; a < TMP.Count; a++)
{
if (a <= 1) continue;
// 049f 삭제
if (TMP[a].StartsWith("f") && idx == "79")
{
if (TMP[a].Contains("▲"))
TMP[a - 1] += "▲";
TMP.RemoveAt(a);
continue;
}
}
SplitContent = TMP.ToArray();
return string.Join("▼", SplitContent);
}
/// <summary>
/// 056 매크로
/// </summary>
/// <param name="Content">태그 내용</param>
/// <returns>태그 매크로 적용된 내용</returns>
private string Index_056(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
// 056 2 4적용
if (SplitContent[a].StartsWith("2") && idx == "86")
SplitContent[a] = "24▲";
// 056 2 5적용
if (SplitContent[a].StartsWith("2") && idx == "87")
SplitContent[a] = "25▲";
// 056 2 6적용
if (SplitContent[a].StartsWith("2") && idx == "88")
SplitContent[a] = "26▲";
if (a <= 1) continue;
}
return string.Join("▼", SplitContent);
}
/// <summary>
/// 100 매크로
/// </summary>
/// <param name="Content">태그 내용</param>
/// <returns>태그 매크로 적용된 내용</returns>
private string Index_100(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (SplitContent[a].StartsWith("a") && idx == "67")
Author_Idx_6768 = SplitContent[a].Substring(1).Replace("▲", "");
if (a <= 1) continue;
}
return string.Join("▼", SplitContent);
}
/// <summary>
/// 110 매크로
/// </summary>
/// <param name="Content">110태그 내용</param>
/// <returns>110태그 매크로 적용된 내용</returns>
private string Index_110(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (SplitContent[a].StartsWith("a") && idx == "68")
Author_Idx_6768 = SplitContent[a].Substring(1).Replace("▲", "");
if (a <= 1) continue;
if (idx == "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)
{//없음
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)
{
List<string> TMP = new List<string>(SplitContent);
for (int a = 0; a < TMP.Count; a++)
{
//빈데이터는 처리하지 않음
if (TMP[a].isEmpty()) continue;
//각 요소뒤에 ; 붙이기 , 로 끝나지않는 경우에만 ,; 문자가 있다면 삭제한다.
//아래 1보다 작다로 인해 a가 미처리되는 현상이 있어 위에다가 붙인다 2508014
if (idx == "113" && (TMP[a].StartsWith("d") || TMP[a].StartsWith("e")))
{
// 새로운 구두점 적용 로직 (2024년 수정)
var subfieldata = TMP[a].Trim();
var endsignal = subfieldata.EndsWith("▲");
if (endsignal) subfieldata = subfieldata.Substring(0, subfieldata.Length - 1);
// 현재 필드가 ,로 끝나지 않는 경우에만 ; 적용 검토
if (!subfieldata.EndsWith(",") && !subfieldata.EndsWith(";"))
{
// 다음 필드가 d나 e인지 확인
bool hasNextDE = false;
for (int nextIdx = a + 1; nextIdx < TMP.Count; nextIdx++)
{
if (!TMP[nextIdx].isEmpty() && (TMP[nextIdx].StartsWith("d") || TMP[nextIdx].StartsWith("e")))
{
hasNextDE = true;
break;
}
}
// 다음에 d나 e 필드가 있으면 ; 적용
if (hasNextDE)
{
subfieldata += ";";
}
}
// ,; 문자가 있다면 ;로 변경
subfieldata = subfieldata.Replace(",;", ";");
if (endsignal) subfieldata += "▲";
TMP[a] = subfieldata;
}
if (a <= 1) continue;
#region
// 두번째 $a 앞에 ":"
if (TMP[a - 1].StartsWith("a") && idx == "2")
if (TMP[a].StartsWith("a"))
if (!TMP[a - 1].EndsWith(":"))
TMP[a - 1] += ":";
// $b 앞에 ":"적용
if (TMP[a].StartsWith("b") && idx == "3")
if (!TMP[a - 1].EndsWith(":"))
TMP[a - 1] += ":";
// $n 앞에 "." 적용
if (TMP[a].StartsWith("n") && idx == "4")
if (!TMP[a - 1].EndsWith("."))
TMP[a - 1] += ".";
// $d 앞에 "/" 적용
if (TMP[a].StartsWith("d") && idx == "6")
if (!TMP[a - 1].EndsWith("/"))
TMP[a - 1] += "/";
// $d앞에 ,, 를 ,로 변경
if (TMP[a].StartsWith("d") && idx == "7")
TMP[a] = TMP[a].Replace(",,", ",");
// $p 앞에 $n이 나온 경우 "," 적용, $p앞에 $n이 없는 경우 "." 적용
if (TMP[a].StartsWith("p") && idx == "8")
{
if (TMP[a - 1].StartsWith("n"))
{
if (!TMP[a - 1].EndsWith(","))
TMP[a - 1] += ",";
}
else
{
if (!TMP[a - 1].EndsWith("."))
TMP[a - 1] += ".";
}
}
// $x 앞에 "=" 적용
if (TMP[a].StartsWith("x") && idx == "5")
if (!TMP[a - 1].EndsWith("="))
TMP[a - 1] += "=";
// $e 앞에 "," 적용
if (TMP[a].StartsWith("e") && idx == "9")
if (!TMP[a - 1].EndsWith(","))
TMP[a - 1] += ",";
#endregion
#region
// 245h [큰글자] 문구적용
if (TMP[a].StartsWith("h") && idx == "89")
TMP[a] = "h[큰글자]" + TMP[a].Substring(1);
// 245h [DVD] 문구적용
if (TMP[a].StartsWith("h") && idx == "90")
TMP[a] = "h[DVD]" + TMP[a].Substring(1);
// 245h [대활자본] 문구적용
if (TMP[a].StartsWith("h") && idx == "91")
TMP[a] = "h[대활자본]" + TMP[a].Substring(1);
// 245h [음악자료] 문구적용
if (TMP[a].StartsWith("h") && idx == "92")
TMP[a] = "h[음악자료]" + TMP[a].Substring(1);
// 245d [공] 뒤에 빈칸 1칸 적용
if (TMP[a].StartsWith("d") && idx == "93")
TMP[a] = TMP[a].Replace("[공] ", "[공]").Replace("[공]", "[공] ");
// 245e [공] 뒤에 빈칸 1칸 적용
if (TMP[a].StartsWith("e") && idx == "94")
TMP[a] = TMP[a].Replace("[공] ", "[공]").Replace("[공]", "[공] ");
// 245d 각괄호[] 삭제
if (TMP[a].StartsWith("d") && idx == "95")
TMP[a] = TMP[a].Replace("[", "").Replace("]", "");
// 245e 각괄호[] 삭제
if (TMP[a].StartsWith("e") && idx == "96")
TMP[a] = TMP[a].Replace("[", "").Replace("]", "");
// 245 d 맨 뒤값이 "글" 일때 "지음"으로 수정
if (TMP[a].StartsWith("d") && idx == "97")
{
bool end = false;
if (TMP[a].EndsWith("글"))
{
if (TMP[a].Contains("▲"))
end = true;
TMP[a] = TMP[a].Substring(0, TMP[a].IndexOf("글")) + "지음";
if (end)
TMP[a] += "▲";
}
}
#endregion
#region
// 245e 삭제
if (TMP[a].StartsWith("e") && idx == "80")
{
if (TMP[a].Contains("▲"))
TMP[a - 1] += "▲";
TMP.RemoveAt(a);
continue;
}
// 245b 삭제
if (TMP[a].StartsWith("b") && idx == "81")
{
if (TMP[a].Contains("▲"))
TMP[a - 1] += "▲";
TMP.RemoveAt(a);
continue;
}
// 245x 삭제
if (TMP[a].StartsWith("x") && idx == "82")
{
if (TMP[a].Contains("▲"))
TMP[a - 1] += "▲";
TMP.RemoveAt(a);
continue;
}
// 245n 삭제
if (TMP[a].StartsWith("n") && idx == "83")
{
if (TMP[a].Contains("▲"))
TMP[a - 1] += "▲";
TMP.RemoveAt(a);
continue;
}
// 245p 삭제
if (TMP[a].StartsWith("p") && idx == "84")
{
if (TMP[a].Contains("▲"))
TMP[a - 1] += "▲";
TMP.RemoveAt(a);
continue;
}
// 245h 삭제
if (TMP[a].StartsWith("h") && idx == "85")
{
if (TMP[a].Contains("▲"))
TMP[a - 1] += "▲";
TMP.RemoveAt(a);
continue;
}
#endregion
}
SplitContent = TMP.ToArray();
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_250(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
// 250a 앞에 "큰글자책"삽입
if (SplitContent[a].StartsWith("a") && idx == "98")
SplitContent[a] = "a큰글자책" + SplitContent[a].Substring(1);
}
return string.Join("▼", SplitContent);
}
private string Index_256(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
//if (idx == "111")
//{
// SplitContent[a] = SplitContent[a].Insert(1, "e-Book");
//}
if (a <= -1) continue;
}
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;
if (SplitContent[a].StartsWith("a"))
{
// 300 a 숫자 p. 숫자 사이 한칸 띄우기
if (idx == "99")
SplitContent[a] = SplitContent[a].Replace(" p.", "p.").Replace("p.", " p.");
// 300 a 숫자 p. 숫자 사이 빈칸 지우기
if (idx == "100")
SplitContent[a] = SplitContent[a].Replace(" p.", "p.");
// 300 a "p." 삭제
if (idx == "101")
SplitContent[a] = SplitContent[a].Replace("p.", "");
// 300 a 맨 앞이 [ 로 시작 될 경우 300a를 [1책] 으로 수정
if (idx == "105")
{
string tmp = SplitContent[a].Substring(1);
if (tmp.StartsWith("["))
SplitContent[a] = "a[1책]";
}
// 300a "비디오디스크" -> "DVD" 문구수정
if (idx == "106")
SplitContent[a] = SplitContent[a].Replace("비디오디스크", "DVD");
// 300 a "매" -> "장" 문구수정
if (idx == "107")
SplitContent[a] = SplitContent[a].Replace("매", "장");
}
if (SplitContent[a].StartsWith("c"))
{
// 300 c 숫자 cm 단위와 숫자 사이 한칸 띄우기
if (idx == "102")
SplitContent[a] = SplitContent[a].Replace(" cm", "cm").Replace("cm", " cm");
// 300 c 숫자 cm 단위와 숫자 사이 빈칸 지우기
if (idx == "103")
SplitContent[a] = SplitContent[a].Replace(" cm", "cm");
// 300 c "cm"삭제
if (idx == "104")
SplitContent[a] = SplitContent[a].Replace("cm", "");
}
if (SplitContent[a].StartsWith("b"))
{
// $b 앞에는 ":" 적용
if (idx == "18")
if (!SplitContent[a - 1].EndsWith(":"))
SplitContent[a - 1] += ":";
// 300 b "천연색삽화"-> "채색삽화" 문구수정
if (idx == "108")
SplitContent[a] = SplitContent[a].Replace("천연색삽화", "채색삽화");
// 300b "천연색, 유성" 으로 덮어 씌움
if (idx == "109")
{
SplitContent[a] = "b천연색, 유성";
if (SplitContent[a].Contains("▲"))
SplitContent[a] += "▲";
}
}
if (SplitContent[a].StartsWith("c"))
{
// $c 앞에는 ";" 적용
if (idx == "19")
if (!SplitContent[a - 1].EndsWith(";"))
SplitContent[a - 1] += ";";
// $c X포함 뒷부분 삭제
if (idx == "73")
{
SplitContent[a] = SplitContent[a].ToLower();
string[] tmp = SplitContent[a].Split('x');
SplitContent[a] = tmp[0] + "cm▲";
}
}
// $e 앞에는 "+" 적용
if (SplitContent[a].StartsWith("e"))
{
if (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_500(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
// "이 도서는 창비 '더책' 오디오 기능이 포함되어 있음" 추가
//if (idx == "110")
//{
// SplitContent[a] = SplitContent[a].Insert(1, "이 도서는 창비 '더책' 오디오 기능이 포함되어 있음");
//}
//if (idx == "112")
//{
// SplitContent[a] = SplitContent[a].Insert(1, "URL 링크 클릭한 후 전자도서 홈페이지에서 로그인하여 이용하시기 바랍니다");
//}
//// 500a "URL 링크 클릭한 후 전자도서 홈페이지에서 로그인하여 이용하시기 바랍니다" 추가
//if (idx == "112")
// ViewMarc = st.AddTagInMarc("500\t \t▼aURL 링크 클릭한 후 전자도서 홈페이지에서 로그인하여 이용하시기 바랍니다", ViewMarc);
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 (idx == "67" && Author_Idx_6768 != "" && SplitContent[a].IndexOf(Author_Idx_6768) > -1)
return "";
if (a <= 1) continue;
}
return string.Join("▼", SplitContent);
}
private string Index_710(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (idx == "68" && Author_Idx_6768 != "" && SplitContent[a].IndexOf(Author_Idx_6768) > -1)
return "";
if (a <= 1) continue;
}
return string.Join("▼", SplitContent);
}
private string Index_830(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (a <= 1) continue;
// $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_950(string idx, string[] SplitContent)
{
for (int a = 0; a < SplitContent.Length; a++)
{
if (SplitContent[a].StartsWith("b"))
{
if (idx == "63") // $b 원표시 제거
SplitContent[a] = SplitContent[a].Replace("₩", "");
if (idx == "71") // $b 원표시 추가
SplitContent[a] = SplitContent[a].Insert(1, "₩");
}
if (a <= 1) continue;
}
return string.Join("▼", SplitContent);
}
#endregion
/// <summary>
/// 타겟 태그를 가져와서 적용할 태그에 새로 만들고 필요에 따라 기존 식별기호 데이터를 삭제함
/// </summary>
/// <param name="TargetTagNum">가져올 태그넘버</param>
/// <param name="TargetTagAccount">가져올 태그의 식별기호</param>
/// <param name="ApplyTagNum">적용할 태그넘버</param>
/// <param name="ApplyTagAccount">적용할 태그의 식별기호</param>
/// <param name="ViewMarc">대상 마크(뷰형태)</param>
/// <param name="jisi">적용할 지시기호</param>
/// <param name="isDelete">가져올 태그의 식별기호 데이터 삭제여부</param>"
string TagToOtherTag(string TargetTagNum, string TargetTagAccount, string ApplyTagNum, string ApplyTagAccount, string ViewMarc, bool isDelete = false, string jisi = " ")
{
List<string> SplitMarc = new List<string>(ViewMarc.Split('\n'));
string Target = "";
// 가져올 태그 정보 추출
foreach (string TagMarc in SplitMarc)
{
if (TagMarc.Length < 2)
continue;
if (TagMarc.StartsWith(TargetTagNum))
{
Target = st.GetMiddelString(TagMarc, "▼" + TargetTagAccount, "▼").Replace("▲", "");
break;
}
}
// 추출된 값이 없을 경우, 처음 들어온 그대로 반환
if (Target == "")
return ViewMarc;
// 추출한 태그의 정보를 적용할 태그에 복사
SplitMarc = MoveTag(ApplyTagNum, jisi, ApplyTagAccount, Target, SplitMarc);
if (isDelete)
{
for (int a = 0; a < SplitMarc.Count; a++)
{
if (SplitMarc[a].Length < 2)
continue;
if (SplitMarc[a].StartsWith(TargetTagNum) && SplitMarc[a].Contains(Target))
{
SplitMarc.RemoveAt(a);
// string RemoveTarget = string.Format("▼{0}{1}", TargetTagAccount, Target);
// SplitMarc[a] = SplitMarc[a].Replace(RemoveTarget, "");
break;
}
}
}
return string.Join("\n", SplitMarc);
}
/// <summary>가져온 태그의 정보를 적용할 태그에 복사함.</summary>
/// <param name="TagNum">적용할 태그 번호</param>
/// <param name="Jisi">적용할 지시기호</param>
/// <param name="TagAccount">적용할 식별기호</param>
/// <param name="TagContent">적용할 내용</param>
/// <param name="Marc">적용할 List형 마크</param>
/// <returns>적용된 List형 마크</returns>
List<string> MoveTag(string TagNum, string Jisi, string TagAccount, string TagContent, List<string> Marc)
{
int AddIndex = -1;
for (int a = 0; a < Marc.Count; a++)
{
if (Marc[a].Length < 2)
continue;
int targetNum = Convert.ToInt32(Marc[a].Substring(0, 3));
int tagNum = Convert.ToInt32(TagNum);
if (targetNum > tagNum)
{
AddIndex = a;
break;
}
}
string Item = string.Format("{0}\t{1}\t▼{2}{3}▲", TagNum, Jisi, TagAccount, TagContent);
//230210 번호가 마지막 번호일 경우 인덱스를 넘어가는 경우발생.. 인덱스를 넘어갈때는 마지막 열에 추가로 변경
if (AddIndex == -1) Marc.Add(Item);
else Marc.Insert(AddIndex, Item);
return Marc;
}
}
}