libObsidean/MarkdownTableParser.cs

61 lines
1.8 KiB
C#
Raw Normal View History

2024-06-16 05:24:46 -03:00
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;
}
}
}