更新标准库UDP等
This commit is contained in:
@@ -38,9 +38,9 @@
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<StackPanel>
|
||||
|
||||
<ComboBox x:Name="combox1"></ComboBox>
|
||||
<ComboBox x:Name="combox2"></ComboBox>
|
||||
<ComboBox x:Name="combox1"/>
|
||||
<ComboBox x:Name="combox2"/>
|
||||
<TextBlock x:Name="debugtext" Text="Berumai"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Orientation="Horizontal" Grid.Row="1">
|
||||
|
||||
@@ -30,164 +30,77 @@ using System.Windows.Shapes;
|
||||
using System.Windows.Threading;
|
||||
using System.Xml.Linq;
|
||||
|
||||
using static Ramitta.Excel;
|
||||
using static Ramitta.lib.SerialPortHandler;
|
||||
using static Ramitta.lib.Excel;
|
||||
using static Ramitta.lib.Basic;
|
||||
using static Ramitta.lib.CryptoHelper;
|
||||
using static Ramitta.SQLite;
|
||||
using static Ramitta.winDataGrid;
|
||||
|
||||
|
||||
|
||||
namespace template
|
||||
{
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
public class XlsxRows
|
||||
{
|
||||
public string 物号 { get; set; }
|
||||
public string 名称描述 { get; set; }
|
||||
public float 数量 { get; set; }
|
||||
public List<string> 标记 { get; set; }
|
||||
public string 备注 { get; set; }
|
||||
}
|
||||
|
||||
static string? filePath;
|
||||
|
||||
#region 初始化MainWindow
|
||||
public MainWindow(StartupEventArgs e)
|
||||
{
|
||||
Startupe = ParseCommandLineArgs(e.Args);
|
||||
InitializeComponent();
|
||||
if (Startupe.TryGetValue("getfile", out string filePath))
|
||||
{
|
||||
MainWindow.filePath = filePath;
|
||||
DebugBar(Debugtag, $"操作目标:{filePath}", 正常绿色);
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugBar(Debugtag, $"未指定操作目标", 警告橙色);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
public static List<XlsxRows> EvaluateFormulaExample(string filePath, string? checkTitle = null)
|
||||
private async void 增(object sender, RoutedEventArgs e)
|
||||
{
|
||||
string filename = @"C:\Users\XerolySkinner\Desktop\identifier.sqlite";
|
||||
SQLite db = new SQLite($"Data Source={filename};Version=3;");
|
||||
|
||||
IWorkbook workbook;
|
||||
// 1. 根据文件扩展名创建正确的 Workbook 实例
|
||||
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
|
||||
try
|
||||
{
|
||||
if (System.IO.Path.GetExtension(filePath).ToLower() == ".xlsx")
|
||||
// 构建查询语句和参数
|
||||
string query = "SELECT * FROM 屋檐屋面方管数 WHERE 型号 = \"M0\" AND 跨度 = 15";
|
||||
|
||||
// 执行查询
|
||||
List<Dictionary<string, object>> results = db.SelectData(query);
|
||||
|
||||
// 处理查询结果
|
||||
if (results != null && results.Count > 0)
|
||||
{
|
||||
workbook = new XSSFWorkbook(fs);
|
||||
// 遍历所有行
|
||||
foreach (var row in results)
|
||||
{
|
||||
// 遍历每行的所有列
|
||||
foreach (var column in row)
|
||||
{
|
||||
Debug.WriteLine($"{column.Key}: {column.Value}");
|
||||
}
|
||||
Debug.WriteLine("---"); // 行分隔符
|
||||
}
|
||||
|
||||
// 或者您可以根据需要处理数据,比如显示在界面上
|
||||
// 例如:dataGrid.ItemsSource = results;
|
||||
}
|
||||
else
|
||||
{
|
||||
workbook = new HSSFWorkbook(fs); // 用于 .xls
|
||||
Debug.WriteLine("未找到记录");
|
||||
}
|
||||
}
|
||||
// 2. 获取第一个工作表
|
||||
ISheet sheet = workbook.GetSheetAt(0);
|
||||
|
||||
ISheet? sheetRelate = null;
|
||||
if (workbook.NumberOfSheets > 1)
|
||||
catch (Exception ex)
|
||||
{
|
||||
sheetRelate = workbook.GetSheetAt(1); // 获取第二个工作表
|
||||
}
|
||||
// 3. 公式表化
|
||||
if (sheetRelate != null)
|
||||
{
|
||||
Dictionary<string, ICell> valueDictionary = new Dictionary<string, ICell>();
|
||||
for (int i = 0; i <= sheetRelate.LastRowNum; i++)
|
||||
{
|
||||
IRow row = sheetRelate.GetRow(i);
|
||||
if (row != null)
|
||||
{
|
||||
ICell keyCell = row.GetCell(0);
|
||||
ICell valueCell = row.GetCell(1);
|
||||
|
||||
if (keyCell != null && valueCell != null)
|
||||
{
|
||||
string key = keyCell.ToString();
|
||||
valueDictionary[key] = valueCell; // 存入字典
|
||||
}
|
||||
}
|
||||
}
|
||||
valueDictionary["单元数"]?.SetCellValue(50);
|
||||
}
|
||||
|
||||
// 4. 遍历跳过行首
|
||||
List<XlsxRows> result= new List<XlsxRows>();
|
||||
for (int i = 1; i <= sheet.LastRowNum; i++) {
|
||||
XlsxRows member = new();
|
||||
member.物号 = sheet.GetRow(i).GetCell(0)?.ToString() ?? "";
|
||||
member.名称描述 = sheet.GetRow(i).GetCell(1)?.ToString() ?? "";
|
||||
member.标记 = new();
|
||||
member.备注 = sheet.GetRow(i).GetCell(4)?.ToString() ?? "";
|
||||
try {
|
||||
member.数量 = xlsxEvaluatorDouble(
|
||||
workbook,
|
||||
sheet.GetRow(i).GetCell(2));
|
||||
result.Add(member);
|
||||
}
|
||||
catch {
|
||||
member.数量 = -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 5. 关闭工作簿(如果不再需要)
|
||||
workbook.Close();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static float xlsxEvaluatorDouble(IWorkbook workbook,ICell cell) {
|
||||
IFormulaEvaluator evaluator = workbook.GetCreationHelper().CreateFormulaEvaluator();
|
||||
// 5. 判断单元格类型是否为公式
|
||||
if (cell.CellType == CellType.Formula)
|
||||
{
|
||||
// 6. 计算公式并获取计算后的单元格值(CellValue)
|
||||
CellValue evaluatedCellValue = evaluator.Evaluate(cell);
|
||||
// 7. 根据计算结果的类型获取值
|
||||
switch (evaluatedCellValue.CellType)
|
||||
{
|
||||
case CellType.Numeric:
|
||||
float numericValue = (float)(evaluatedCellValue.NumberValue);
|
||||
return numericValue;
|
||||
break;
|
||||
case CellType.String:
|
||||
string stringValue = evaluatedCellValue.StringValue;
|
||||
break;
|
||||
case CellType.Boolean:
|
||||
bool boolValue = evaluatedCellValue.BooleanValue;
|
||||
break;
|
||||
case CellType.Error:
|
||||
// 处理错误值
|
||||
Debug.WriteLine("公式计算错误");
|
||||
break;
|
||||
default:
|
||||
Debug.WriteLine("未知类型的公式结果");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return (float)cell.NumericCellValue;
|
||||
}
|
||||
throw new NotImplementedException("并非都是double返回值");
|
||||
}
|
||||
|
||||
private async void 增(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var ret=EvaluateFormulaExample(@"C:\Users\Xeroly\Desktop\newmagg.xlsx");
|
||||
|
||||
foreach (var cell in ret) {
|
||||
Debug.WriteLine($"{cell.物号}->{cell.名称描述}:{cell.数量}");
|
||||
// 处理异常
|
||||
Debug.WriteLine($"查询失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private async void 改(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var mkshit = GenerateKeyPair();
|
||||
var privateKey = "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";
|
||||
privateKey=privateKey.Replace("\r","");
|
||||
privateKey = privateKey.Replace("\n", "");
|
||||
|
||||
string calculatedPublicKey = GetPublicKeyFromPrivate(privateKey);
|
||||
|
||||
}
|
||||
|
||||
private async void 删(object? sender = null, RoutedEventArgs? e=null)
|
||||
@@ -202,7 +115,6 @@ namespace template
|
||||
|
||||
private void 载入(object sender, RoutedEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void 卸载(object sender, RoutedEventArgs e)
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Driver;
|
||||
using NPOI.XSSF.UserModel;
|
||||
using NPOI.XSSF.UserModel;
|
||||
using Ramitta;
|
||||
using System;
|
||||
using System.Collections;
|
||||
@@ -12,7 +10,7 @@ using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using static Ramitta.Excel;
|
||||
using static Ramitta.lib.Excel;
|
||||
using static Ramitta.lib.Basic;
|
||||
|
||||
|
||||
@@ -20,323 +18,6 @@ namespace template
|
||||
{
|
||||
public partial class MainWindow
|
||||
{
|
||||
Ramitta.Neo4jtool neo4jService = new Ramitta.Neo4jtool("bolt://localhost:7687", "neo4j", "AE1BC6D3");
|
||||
|
||||
public async void 数据升天计划neo4j()
|
||||
{
|
||||
await neo4jService.DeleteAllNodesAndRelationshipsAsync();
|
||||
|
||||
var 文件夹名单 = GetFilesAndDirectories(inputPath(null,null), true,
|
||||
outputFormat: dir => Path.GetFileNameWithoutExtension(dir));
|
||||
|
||||
|
||||
foreach (var 文件夹 in 文件夹名单)
|
||||
{
|
||||
var 文件名单 = GetFilesAndDirectories(inputPath(null, null) + 文件夹, false,
|
||||
outputFormat: dir => System.IO.Path.GetFileNameWithoutExtension(dir));
|
||||
|
||||
await neo4jService.CreateNodeAsync("文件夹", new Dictionary<string, string>() { { "name", 文件夹 } },alway_create:true);
|
||||
|
||||
foreach (var 文件 in 文件名单)
|
||||
{
|
||||
var name = Guid.NewGuid().ToString();
|
||||
var pair = new Dictionary<string, string>() {
|
||||
{ "name", name },{ "文件夹",文件夹} };
|
||||
|
||||
if (文件夹.Contains("边墙沉重管") ||
|
||||
文件夹.Contains("边墙基座固定") ||
|
||||
文件夹.Contains("杂件"))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
pair.Add("类型", Regex.Match(文件, @"([^-]+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (
|
||||
文件夹.Contains("边墙沉重管") ||
|
||||
文件夹.Contains("承重柱") ||
|
||||
文件夹.Contains("弧形拉伸杆") ||
|
||||
文件夹.Contains("山墙侧柱套件") ||
|
||||
文件夹.Contains("山墙沉重管") ||
|
||||
文件夹.Contains("屋脊连接角") ||
|
||||
文件夹.Contains("屋面方管") ||
|
||||
文件夹.Contains("屋檐方管") ||
|
||||
文件夹.Contains("斜梁") ||
|
||||
文件夹.Contains("右悬挂管") ||
|
||||
文件夹.Contains("左悬挂管"))
|
||||
{
|
||||
pair.Add("型号", Regex.Match(文件, @"^(?:[^-]+-){2}([^-\r\n]+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (文件.Contains("跨度"))
|
||||
{
|
||||
pair.Add("跨度", Regex.Match(文件, @"跨度(\d+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (文件.Contains("长度"))
|
||||
{
|
||||
pair.Add("长度", Regex.Match(文件, @"长度(\d+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (文件.Contains("宽度"))
|
||||
{
|
||||
pair.Add("宽度", Regex.Match(文件, @"宽度(\d+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
await neo4jService.CreateNodeAsync("文件", pair, alway_create: true);
|
||||
await neo4jService.CreateRelationshipAsync("拥有",
|
||||
"文件夹", new Dictionary<string, string> { { "name", 文件夹 } },
|
||||
"文件", new Dictionary<string, string> { { "name", name } });
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Func<string?, string?, string> inputPath = (n, f) =>
|
||||
{
|
||||
// 如果 n 和 f 都为空,返回文件路径的根目录
|
||||
if (string.IsNullOrEmpty(n) && string.IsNullOrEmpty(f))
|
||||
return @"C:\Users\Xeroly\Desktop\组件库\";
|
||||
|
||||
// 如果 n 为空,返回路径不包含文件夹
|
||||
if (string.IsNullOrEmpty(n))
|
||||
return @"C:\Users\Xeroly\Desktop\组件库\" + f + ".xlsx";
|
||||
|
||||
// 如果 f 为空,返回路径不包含文件名
|
||||
if (string.IsNullOrEmpty(f))
|
||||
return @"C:\Users\Xeroly\Desktop\组件库\" + n + @"\";
|
||||
|
||||
// 如果 n 和 f 都不为空,返回完整路径
|
||||
return @"C:\Users\Xeroly\Desktop\组件库\" + n + @"\" + f + ".xlsx";
|
||||
};
|
||||
Func<string, string> outPath = (n) => @"C:\Users\Xeroly\Desktop\Outnm\" + n +".xlsx";
|
||||
|
||||
public void CreateXlsxMember(
|
||||
Dictionary<string, object> pair,
|
||||
string? fileUUID = null,
|
||||
Dictionary<string, List<string>>? dict = null)
|
||||
{
|
||||
// 如果没有传入 fileUUID,使用pair中的"name"作为文件名
|
||||
if (fileUUID == null)
|
||||
fileUUID = pair["name"].ToString();
|
||||
|
||||
// 创建一个新的工作簿
|
||||
var workbook = new XSSFWorkbook();
|
||||
var sheet1 = workbook.CreateSheet("data");
|
||||
var sheet2 = workbook.CreateSheet("info");
|
||||
var sheet3 = workbook.CreateSheet("link");
|
||||
|
||||
// 将字典pair内容竖着写入sheet2(即键在第一行,值在第二行)
|
||||
int columnIndex = 0;
|
||||
var headerRow = sheet2.CreateRow(0); // 第一行用作标题行(键)
|
||||
var valueRow = sheet2.CreateRow(1); // 第二行用作数据行(值)
|
||||
|
||||
foreach (var entry in pair)
|
||||
{
|
||||
// 将键写入第一行的相应单元格
|
||||
headerRow.CreateCell(columnIndex).SetCellValue(entry.Key);
|
||||
|
||||
// 将值写入第二行的相应单元格
|
||||
valueRow.CreateCell(columnIndex).SetCellValue(entry.Value?.ToString() ?? ""); // 防止null值导致异常
|
||||
|
||||
columnIndex++;
|
||||
}
|
||||
|
||||
// 如果dict不为空,将其内容竖着写入sheet1
|
||||
if (dict != null && dict.Any())
|
||||
{
|
||||
int rowIndex = 0;
|
||||
|
||||
// 先写入表头(字典的键)
|
||||
var dictHeaderRow = sheet1.CreateRow(rowIndex++);
|
||||
int dictColumnIndex = 0;
|
||||
foreach (var key in dict.Keys)
|
||||
{
|
||||
dictHeaderRow.CreateCell(dictColumnIndex++).SetCellValue(key); // 写入字典的键作为列名
|
||||
}
|
||||
|
||||
// 写入每一列数据(将List<string>的数据填充到各自的列)
|
||||
int maxRows = dict.Values.Max(list => list.Count); // 获取最多的行数
|
||||
|
||||
for (int i = 0; i < maxRows; i++)
|
||||
{
|
||||
var row = sheet1.CreateRow(rowIndex++);
|
||||
|
||||
int colIndex = 0;
|
||||
foreach (var key in dict.Keys)
|
||||
{
|
||||
var list = dict[key];
|
||||
|
||||
// 如果list中有对应的项,写入,否则写入空字符串
|
||||
row.CreateCell(colIndex++).SetCellValue(i < list.Count ? list[i] : string.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 将数据写入到文件
|
||||
using (var fs = new FileStream(outPath(fileUUID), FileMode.Create, FileAccess.Write))
|
||||
{
|
||||
workbook.Write(fs);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async void 表原核生物化() {
|
||||
|
||||
var 文件夹名单 = GetFilesAndDirectories(inputPath(null, null), true,
|
||||
outputFormat: dir => Path.GetFileNameWithoutExtension(dir));
|
||||
|
||||
foreach (var 文件夹 in 文件夹名单)
|
||||
{
|
||||
var 文件名单 = GetFilesAndDirectories(inputPath(null, null) + 文件夹, false,
|
||||
outputFormat: dir => Path.GetFileNameWithoutExtension(dir));
|
||||
|
||||
foreach (var 文件 in 文件名单)
|
||||
{
|
||||
var name = Guid.NewGuid().ToString();
|
||||
var pair = new Dictionary<string, object>() {
|
||||
{"name", name },{"文件夹", 文件夹 } };
|
||||
|
||||
if (文件夹.Contains("边墙沉重管") ||
|
||||
文件夹.Contains("边墙基座固定") ||
|
||||
文件夹.Contains("杂件"))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
pair.Add("类型", Regex.Match(文件, @"([^-]+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (
|
||||
文件夹.Contains("边墙沉重管") ||
|
||||
文件夹.Contains("承重柱") ||
|
||||
文件夹.Contains("弧形拉伸杆") ||
|
||||
文件夹.Contains("山墙侧柱套件") ||
|
||||
文件夹.Contains("山墙沉重管") ||
|
||||
文件夹.Contains("屋脊连接角") ||
|
||||
文件夹.Contains("屋面方管") ||
|
||||
文件夹.Contains("屋檐方管") ||
|
||||
文件夹.Contains("斜梁") ||
|
||||
文件夹.Contains("右悬挂管") ||
|
||||
文件夹.Contains("左悬挂管"))
|
||||
{
|
||||
pair.Add("型号", Regex.Match(文件, @"^(?:[^-]+-){2}([^-\r\n]+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (文件.Contains("跨度"))
|
||||
{
|
||||
pair.Add("跨度", Regex.Match(文件, @"跨度(\d+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (文件.Contains("长度"))
|
||||
{
|
||||
pair.Add("长度", Regex.Match(文件, @"长度(\d+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (文件.Contains("宽度"))
|
||||
{
|
||||
pair.Add("宽度", Regex.Match(文件, @"宽度(\d+)").Groups[1].Value);
|
||||
}
|
||||
if (文件.Contains("边高"))
|
||||
{
|
||||
pair.Add("边高", Regex.Match(文件, @"边高(\d+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
Dictionary<string, List<string>> dict =
|
||||
ReadExcelAsDictCol(inputPath(文件夹, 文件),headerInit:new List<string>() {
|
||||
"料号","名称","数量","标志","备注" });
|
||||
|
||||
// 删除每个列表中第一个元素(如果列表不为空)
|
||||
foreach (var key in dict.Keys.ToList()) // 使用ToList()来避免修改集合时的枚举问题
|
||||
{
|
||||
if (dict[key].Any())
|
||||
{
|
||||
dict[key].RemoveAt(0); // 删除列表中的第一个元素
|
||||
}
|
||||
}
|
||||
|
||||
CreateXlsxMember(pair,
|
||||
dict:dict);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async void 新建关系(Dictionary<string, string> pair, Dictionary<string, List<string>> dict,string tap,string rela="属于") {
|
||||
if (pair.ContainsKey(tap))
|
||||
{
|
||||
await neo4jService.CreateNodeAsync(tap, new Dictionary<string, string>() {
|
||||
{ "name", tap} });
|
||||
|
||||
await neo4jService.CreateRelationshipAsync(rela,
|
||||
tap, new Dictionary<string, string> { { "name", tap } },
|
||||
"文件", new Dictionary<string, string> { { "name", dict["name"][0] } },
|
||||
relationshipProperties:
|
||||
new Dictionary<string, string>{ { "value", dict[tap][0] } });
|
||||
}
|
||||
}
|
||||
|
||||
public async void 库表升天() {
|
||||
await neo4jService.DeleteAllNodesAndRelationshipsAsync();
|
||||
var 文件夹路径 = @"C:\Users\Xeroly\Desktop\Outnm\";
|
||||
|
||||
var 文件名单 = GetFilesAndDirectories(
|
||||
文件夹路径,false,
|
||||
outputFormat: dir => Path.GetFileNameWithoutExtension(dir));
|
||||
|
||||
foreach (var 文件 in 文件名单) {
|
||||
var dict = ReadExcelAsDictCol(文件夹路径+文件+".xlsx",sheetName:"info");
|
||||
|
||||
// 创建新的字典pair
|
||||
var pair = new Dictionary<string, string>();
|
||||
|
||||
// 遍历dict,将每个key对应的第一个value添加到新的pair字典中
|
||||
foreach (var entry in dict)
|
||||
{
|
||||
if (entry.Value.Any()) // 确保每个列表至少有一个元素
|
||||
{
|
||||
pair.Add(entry.Key, entry.Value[0]); // 只取第一个元素
|
||||
}
|
||||
}
|
||||
|
||||
await neo4jService.CreateNodeAsync("文件夹", new Dictionary<string, string>() {
|
||||
{ "name", dict["文件夹"][0] } });
|
||||
|
||||
await neo4jService.CreateNodeAsync("文件", pair);
|
||||
|
||||
|
||||
|
||||
await neo4jService.CreateRelationshipAsync("拥有",
|
||||
"文件夹", new Dictionary<string, string> { { "name", dict["文件夹"][0] } },
|
||||
"文件", new Dictionary<string, string> { { "name", dict["name"][0] } });
|
||||
|
||||
|
||||
新建关系(pair, dict, "跨度", "跨度");
|
||||
新建关系(pair, dict, "宽度","宽度");
|
||||
新建关系(pair, dict, "长度","长度");
|
||||
新建关系(pair, dict, "型号","型号");
|
||||
新建关系(pair, dict, "边高", "边高");
|
||||
|
||||
var dictdata = ReadExcelAsDictRow(文件夹路径 + 文件 + ".xlsx", sheetName: "data",headerInit:
|
||||
new List<string>() { "料号","名称","数量","标志","备注"});
|
||||
|
||||
dictdata.RemoveAt(0); // 移除列表中的第一个字典
|
||||
|
||||
foreach (var row in dictdata) {
|
||||
await neo4jService.CreateNodeAsync("品物", new Dictionary<string, string>() {
|
||||
{ "name", row["料号"] },{"名称",row["名称"] } });
|
||||
|
||||
await neo4jService.CreateRelationshipAsync("数量",
|
||||
"文件", new Dictionary<string, string> { { "name", dict["name"][0] } },
|
||||
"品物", new Dictionary<string, string> { { "name", row["料号"] } },
|
||||
relationshipProperties:
|
||||
new Dictionary<string, string> { { "数量", row["数量"] } });
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public async void 数据升天计划sqlite() {
|
||||
string filename = @"C:\Users\Xeroly\Desktop\琦亚\Kia.db";
|
||||
SQLite db = new SQLite($"Data Source={filename};Version=3;");
|
||||
@@ -456,79 +137,5 @@ namespace template
|
||||
}
|
||||
}
|
||||
|
||||
public async void 数据升天计划mongodb()
|
||||
{
|
||||
var 文件夹名单 = GetFilesAndDirectories(inputPath(null, null), true,
|
||||
outputFormat: dir => Path.GetFileNameWithoutExtension(dir));
|
||||
|
||||
foreach (var 文件夹 in 文件夹名单)
|
||||
{
|
||||
var 文件名单 = GetFilesAndDirectories(inputPath(null, null) + 文件夹, false,
|
||||
outputFormat: dir => System.IO.Path.GetFileNameWithoutExtension(dir));
|
||||
/*
|
||||
// 使用示例
|
||||
var mongoDB = new MongoDB_interface(
|
||||
"mongodb://localhost:27017",
|
||||
"XerolySkinner",
|
||||
文件夹);
|
||||
*/
|
||||
foreach (var 文件 in 文件名单)
|
||||
{
|
||||
var name = Guid.NewGuid().ToString();
|
||||
var pair = new Dictionary<string, string>() {
|
||||
{ "name", name },{ "文件夹",文件夹} };
|
||||
|
||||
if (文件夹.Contains("边墙沉重管") ||
|
||||
文件夹.Contains("边墙基座固定") ||
|
||||
文件夹.Contains("杂件"))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
pair.Add("类型", Regex.Match(文件, @"([^-]+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (
|
||||
文件夹.Contains("边墙沉重管") ||
|
||||
文件夹.Contains("承重柱") ||
|
||||
文件夹.Contains("弧形拉伸杆") ||
|
||||
文件夹.Contains("山墙侧柱套件") ||
|
||||
文件夹.Contains("山墙沉重管") ||
|
||||
文件夹.Contains("屋脊连接角") ||
|
||||
文件夹.Contains("屋面方管") ||
|
||||
文件夹.Contains("屋檐方管") ||
|
||||
文件夹.Contains("斜梁") ||
|
||||
文件夹.Contains("右悬挂管") ||
|
||||
文件夹.Contains("左悬挂管"))
|
||||
{
|
||||
pair.Add("型号", Regex.Match(文件, @"^(?:[^-]+-){2}([^-\r\n]+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (文件.Contains("跨度"))
|
||||
{
|
||||
pair.Add("跨度", Regex.Match(文件, @"跨度(\d+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (文件.Contains("长度"))
|
||||
{
|
||||
pair.Add("长度", Regex.Match(文件, @"长度(\d+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
if (文件.Contains("宽度"))
|
||||
{
|
||||
pair.Add("宽度", Regex.Match(文件, @"宽度(\d+)").Groups[1].Value);
|
||||
}
|
||||
|
||||
/*
|
||||
await neo4jService.CreateNodeAsync("文件", pair, alway_create: true);
|
||||
await neo4jService.CreateRelationshipAsync("拥有",
|
||||
"文件夹", new Dictionary<string, string> { { "name", 文件夹 } },
|
||||
"文件", new Dictionary<string, string> { { "name", name } });
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
<PackageReference Include="MongoDB.Driver" Version="3.5.0" />
|
||||
<PackageReference Include="Neo4j.Driver" Version="5.28.3" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Npgsql" Version="9.0.3" />
|
||||
<PackageReference Include="System.Data.SQLite" Version="2.0.1" />
|
||||
<PackageReference Include="System.IO.Ports" Version="9.0.10" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
Reference in New Issue
Block a user