61 lines
1.8 KiB
C#
61 lines
1.8 KiB
C#
using System.Text.RegularExpressions;
|
|
using System.IO;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace libObsidean
|
|
{
|
|
public class MarkdownTableParser
|
|
{
|
|
public static string[,] ParseTableFromMarkdown(string filePath)
|
|
{
|
|
var lines = File.ReadAllLines(filePath);
|
|
var tableLines = ExtractTableLines(lines);
|
|
return ConvertTableLinesToArray(tableLines);
|
|
}
|
|
|
|
private static List<string> ExtractTableLines(string[] lines)
|
|
{
|
|
List<string> tableLines = new List<string>();
|
|
bool inTable = false;
|
|
|
|
foreach (var line in lines)
|
|
{
|
|
if (line.StartsWith("|") && line.EndsWith("|"))
|
|
{
|
|
inTable = true;
|
|
tableLines.Add(line.Trim());
|
|
}
|
|
else if (inTable)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
return tableLines;
|
|
}
|
|
|
|
private static string[,] ConvertTableLinesToArray(List<string> tableLines)
|
|
{
|
|
if (tableLines.Count == 0)
|
|
return new string[0, 0];
|
|
|
|
var header = tableLines[0].Split('|').Select(h => h.Trim()).Where(h => !string.IsNullOrEmpty(h)).ToArray();
|
|
int columns = header.Length;
|
|
int rows = tableLines.Count - 1;
|
|
|
|
string[,] tableArray = new string[rows, columns];
|
|
|
|
for (int i = 1; i <= rows; i++)
|
|
{
|
|
var row = tableLines[i].Split('|').Select(r => r.Trim()).Where(r => !string.IsNullOrEmpty(r)).ToArray();
|
|
for (int j = 0; j < columns; j++)
|
|
{
|
|
tableArray[i - 1, j] = row[j];
|
|
}
|
|
}
|
|
|
|
return tableArray;
|
|
}
|
|
}
|
|
}
|