レシートのスキャンデータから、Money用のOFXデータを作成するようなソフトを
作ってみようかと考えている。LINQを少し使ってみた。
○例えば、指定フォルダのファイルをcomboboxに取り込む ためには
public static IEnumerable<string> SearchDir(string dirPath, string str)
{
// 指定フォルダーのファイル列挙
DirectoryInfo di = new DirectoryInfo(dirPath);
IEnumerable<System.IO.FileInfo> fiList = di.GetFiles("*.pdf", SearchOption.TopDirectoryOnly);
return
fiList
.Where(fi =>
(0 <= fi.Name.IndexOf(str, StringComparison.CurrentCultureIgnoreCase)))
.Select(fi => fi.FullName); // フルパスに変換
}
private void comboBox1_DropDown_1(object sender, EventArgs e)
{
comboBox1.Items.Clear();
foreach (string path in SearchDir(textBox2.Text, ".pdf"))
{
comboBox1.Items.Add(path);
}
}
○ 複数ページのPDFのレシートからテキストを抽出し、そのテキストデータをページデータに分割する処理は
textBox1.Text = File.ReadAllText(System.IO.Path.GetDirectoryName(filename)+"\\"+ System.IO.Path.GetFileNameWithoutExtension(filename)+".txt", System.Text.Encoding.GetEncoding("shift_jis"));
string txtall = textBox1.Text;
string[] delimiter = { "---------------------------------- Page" };
receipt = txtall.Split(delimiter , StringSplitOptions.None);
shpName=receipt.Select(rc => shop_c(rc)).ToArray();
string[] idx = receipt.Select(rc => rc.Substring(0, 5)).ToArray();
comboBox2.Items.AddRange(idx);
private string shop_c(string txt)
{
string[] shopd = listBox1.Items.Cast<string>().ToArray();//あらかじめ登録してある店名のデータがレシートの中にあれば、店名を出力
string sst="";
foreach (string st in shopd)
{
if (txt.IndexOf(st) >= 0)
{
sst= st;
}
}
return sst;
}
0 件のコメント:
コメントを投稿