Files
Unimarc/test/Form1.cs
2021-03-16 09:02:26 +09:00

233 lines
10 KiB
C#
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
/*
// 리더부
string Marc_data = "00494nam 2200193 k 4500" +
// 디렉토리
"005001500000" +
"008004100015" +
"020003300056" +
"049001700089" +
"056001300106" +
"090001800119" +
"100001100137" +
"245004100148" +
"260002100189" +
"300001600210" +
"500001300226" +
"653003900239" +
"700001100278" +
"950001100289▲" +
// 가변길이필드
"20200213170911▲" +
"200213s2019 ggk c 000 f kor ▲" +
" ▼a9788936459093▼g43810▼c\\12000▲" +
"0 ▼lJM0000045930▲" +
" ▼a813.7▼25▲" +
" ▼a813.7▼b이98페▲" +
"1 ▼a이희영▲" +
"00▼a페인트▼b이희영 장편소설▼d이희영 지음▲" +
" ▼a파주▼b창비▼c2019▲" +
" ▼a228p.▼c28cm▲" +
" ▼a양장본임▲" +
" ▼a페인트▼a창비청소년문학▼a청소년소설▲" +
"1 ▼a이희영▲" +
"0 ▼b\\12000▲↔";
*/
string Marc_data = "00622nam 2200205 k 4500" +
"005001500000" +
"008004100015" +
"020003300056" +
"020002400089" +
"049002100113" +
"056001300134" +
"090001800147" +
"245007200165" +
"260003900237" +
"300002800276" +
"653005300304" +
"700001100357" +
"740001400368" +
"940002300382" +
"950001100405▲" +
"20210219095445▲" +
"210219s2021 ulka j 000 kor ▲" +
" ▼a9788931461213▼g94000▼c\\15000▲" +
"1 ▼a9788931461220(세트)▲" +
"0 ▼lEM0000166080▼f아▲" +
" ▼a005.1▼25▲" +
" ▼a005.1▼b안79ㅈ▲" +
"20▼a(알버트 AI로봇과 함께하는) 즐거운 엔트리 코딩▼b스택 코딩▼d안진석 저▲" +
" ▼a서울▼bYoungjin.com(영진닷컴)▼c2021▲" +
" ▼a156p.▼b천연색삽화▼c29cm▲" +
" ▼aAI로봇▼a엔트리▼a코딩▼a스택코딩▼a초등컴퓨터▼a아동▲" +
"1 ▼a안진석▲" +
"02▼a스택 코딩▲" +
"0 ▼a즐거운 엔트리 코딩▲" +
"0 ▼b\\15000▲↔";
// 마크 원본을 편집기 스타일로 가공
Marc_data = Marc_data.Replace("", "▼");
Marc_data = Marc_data.Replace("", "▲");
string leader = Marc_data.Substring(0, 24);
int startidx = 0;
label1.Text = leader;
string[] data = Marc_data.Substring(24).Split('▲');
string[] input = { "", "" };
for (int a = 1; a < data.Length-1; a++)
{
input[0] = data[0].Substring(startidx, 12);
startidx += 12;
input[1] = data[a] + "▲";
dataGridView1.Rows.Add(input);
}
for (int a= 0; a < dataGridView1.Rows.Count; a++)
{
string result1 = dataGridView1.Rows[a].Cells[0].Value.ToString().Substring(0,3);
if (dataGridView1.Rows[a].Cells[1].Value.ToString().IndexOf("▼") == -1) {
result1 += "\t \t" + dataGridView1.Rows[a].Cells[1].Value.ToString();
}
else {
string temp = dataGridView1.Rows[a].Cells[1].Value.ToString().Insert(2, "\t");
result1 += "\t" + temp;
}
richTextBox1.Text += result1 + "\n";
}
// 편집기 스타일 마크를 원본으로 가공
string text = richTextBox1.Text.Replace("\t", "");
string[] array_text = text.Split('\n');
/// num+count+total = 디렉토리
List<string> num = new List<string>();
List<string> count = new List<string>();
List<string> total = new List<string>();
for(int a = 0; a < array_text.Length - 1; a++)
{
num.Add(array_text[a].Substring(0,3)); // 태그넘버 저장
if (array_text[a][5]== '▼') {
array_text[a] = array_text[a].Remove(0, 3);
}
else { array_text[a] = array_text[a].Remove(0, 5); }
richTextBox2.Text += array_text[a] + "\n";
int textLength = Encoding.Default.GetBytes(array_text[a]).Length
- WordCheck(array_text[a], "▲")
- WordCheck(array_text[a], "▼");
count.Add(insert_Zero(textLength, 4));
}
for(int a= 0; a < array_text.Length; a++)
{
if (a == 0) { total.Add("0"); }
else if (a > 1)
{
int b = Convert.ToInt32(total[total.Count - 1]);
int c = Convert.ToInt32(Encoding.Default.GetBytes(array_text[a - 2]).Length.ToString())
- WordCheck(array_text[a - 2], "▲")
- WordCheck(array_text[a - 2], "▼");
int res = b + c;
total.Add(res.ToString());
}
}
string[] str_num = num.ToArray();
for(int a= 0; a < str_num.Length; a++)
{
if (total[a].Length == 4) { total[a] = total[a].Insert(0, "0"); }
else if (total[a].Length == 3) { total[a] = total[a].Insert(0, "00"); }
else if (total[a].Length == 2) { total[a] = total[a].Insert(0, "000"); }
else if (total[a].Length == 1) { total[a] = total[a].Insert(0, "0000"); }
richTextBox3.Text += str_num[a] + count[a] + total[a] + "\n";
}
// 00494nam 2200193 k 4500
string[] reader = { "00000", "n", "a", "m", " ",
" ", "2", "2", "00000", " ",
"k", " ", "4", "5", "0",
"0" };
richTextBox2.Text += "↔";
richTextBox3.Text += "▲";
string = richTextBox3.Text.Replace("\n", "");
string = richTextBox2.Text.Replace("\n", "");
string dp = + ;
int recode = Encoding.Default.GetBytes(dp).Length
- WordCheck(dp, "▲") - WordCheck(dp, "▼") - WordCheck(dp, "↔");
reader[0] = insert_Zero(recode + 24, 5);
int data_addr = 24 + Encoding.Default.GetBytes().Length - WordCheck(, "▲");
reader[8] = insert_Zero(data_addr, 5);
for(int a = 0; a < reader.Length; a++)
{
textBox1.Text += reader[a];
}
string result = textBox1.Text + + ;
if (Marc_data == result)
{
label3.Text = "True";
}
else { label3.Text = "False"; }
label4.Text = Encoding.Default.GetBytes(Marc_data).Length.ToString();
}
int WordCheck(string String, string Word)
{
string[] StringArray = String.Split(new string[] { Word }, StringSplitOptions.None);
return StringArray.Length - 1;
}
string insert_Zero(int value, int count)
{
string result = string.Empty;
switch (count)
{
case 5:
if (value < 10) { result = "0000"; }
else if (value < 100) { result = "000"; }
else if (value < 1000) { result = "00"; }
else if (value < 10000) { result = "0"; }
break;
case 4:
if (value < 10) { result = "000"; }
else if (value < 100) { result = "00"; }
else if (value < 1000) { result = "0"; }
break;
default:
break;
}
result += value.ToString();
return result;
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 1) {
int idx = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString().IndexOf("▼");
label2.Text = idx.ToString();
}
}
}
}