///---------------------------------------------------------------------------- /// <summary> /// CSVデータをMDBへインサートする</summary> ///---------------------------------------------------------------------------- private void GetCsvDataToMDB() { // CSVファイルがなければ終了 if (System.IO.Directory.GetFiles(Properties.Settings.Default.dataPath, "*.csv").Count() == 0) { return; } // オーナーフォームを無効にする this.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = this; frmP.Show(); // OCRのCSVデータをMDBへ取り込む OCRData ocr = new OCRData(); ocr.CsvToMdb(Properties.Settings.Default.dataPath, frmP, dts); // いったんオーナーをアクティブにする this.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す this.Enabled = true; }
/// <summary> /// OCR処理を実施します /// </summary> /// <param name="InPath">入力パス</param> /// <param name="NgPath">NG出力パス</param> /// <param name="rePath">OCR変換結果出力パス</param> /// <param name="FormatName">書式ファイル名</param> /// <param name="fCnt">書式ファイルの件数</param> private void ocrMain(string InPath, string NgPath, string rePath, string FormatName, int fCnt) { IEngine en = null; // OCRエンジンのインスタンスを保持 string ocr_csv = string.Empty; // OCR変換出力CSVファイル int _okCount = 0; // OCR変換画像枚数 int _ngCount = 0; // フォーマットアンマッチ画像枚数 string fnm = string.Empty; // ファイル名 try { // 指定された出力先フォルダがなければ作成する if (System.IO.Directory.Exists(rePath) == false) { System.IO.Directory.CreateDirectory(rePath); } // 指定されたNGの場合の出力先フォルダがなければ作成する if (System.IO.Directory.Exists(NgPath) == false) { System.IO.Directory.CreateDirectory(NgPath); } // OCRエンジンのインスタンスの生成・取得 en = EngineFactory.GetEngine(); if (en == null) { // エンジンが他で取得されている場合は、Release() されるまで取得できない System.Console.WriteLine("SDKは使用中です"); return; } //オーナーフォームを無効にする this.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = this; frmP.Show(); IFormatList FormatList; IFormat Format; IField Field; int nPage; int ocrPage = 0; int fileCount = 0; // フォーマットのロード・設定 FormatList = en.FormatList; FormatList.Add(FormatName); // tifファイルの認識 foreach (string files in System.IO.Directory.GetFiles(InPath, "*.tif")) { nPage = 1; while (true) { try { // 対象画像を設定する en.SetBitmap(files, nPage); //プログレスバー表示 fileCount++; frmP.Text = "OCR変換処理実行中 " + fileCount.ToString() + "/" + fCnt.ToString(); frmP.progressValue = fileCount * 100 / fCnt; frmP.ProgressStep(); } catch (IDRException ex) { // ページ読み込みエラー if (ex.No == ErrorCode.IDR_ERROR_FORM_FILEREAD) { // ページの終了 break; } else { // 例外のキャッチ MessageBox.Show("例外が発生しました:Error No ={0:X}", ex.No.ToString()); } } //////Console.WriteLine("-----" + strImageFile + "の" + nPage + "ページ-----"); // 現在ロードされている画像を自動的に傾き補正する en.AutoSkew(); // 傾き角度の取得 double angle = en.GetSkewAngle(); //////System.Console.WriteLine("時計回りに" + angle + "度傾き補正を行いました"); try { // 現在ロードされている画像を自動回転してマッチする番号を取得する Format = en.MatchFormatRotate(); int direct = en.GetRotateAngle(); //画像ロード RasterCodecs.Startup(); RasterCodecs cs = new RasterCodecs(); //RasterImage img; // 描画時に使用される速度、品質、およびスタイルを制御します。 //RasterPaintProperties prop = new RasterPaintProperties(); //prop = RasterPaintProperties.Default; //prop.PaintDisplayMode = RasterPaintDisplayModeFlags.Resample; //leadImg.PaintProperties = prop; RasterImage img = cs.Load(files, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1); RotateCommand rc = new RotateCommand(); rc.Angle = (direct) * 90 * 100; rc.FillColor = new RasterColor(255, 255, 255); rc.Flags = RotateCommandFlags.Resize; rc.Run(img); //rc.Run(leadImg.Image); //cs.Save(leadImg.Image, files, RasterImageFormat.Tif, 0, 1, 1, 1, CodecsSavePageMode.Overwrite); cs.Save(img, files, RasterImageFormat.CcittGroup4, 0, 1, 1, 1, CodecsSavePageMode.Overwrite); // マッチしたフォーマットに登録されているフィールド数を取得 int fieldNum = Format.NumOfFields; int matchNum = Format.FormatNo + 1; //////System.Console.WriteLine(matchNum + "番目のフォーマットがマッチ"); int i = 1; ocr_csv = string.Empty; // ファイルの先頭フィールドにファイル番号をセットします ocr_csv = System.IO.Path.GetFileNameWithoutExtension(files) + ","; // ファイルに画像ファイル名フィールドを付加します ocr_csv += System.IO.Path.GetFileName(files); // 認識されたフィールドを順次読み出します Field = Format.Begin(); while (Field != null) { //カンマ付加 if (ocr_csv != string.Empty) { ocr_csv += ","; } // 指定フィールドを認識し、テキストを取得 string strText = Field.ExtractFieldText(); ocr_csv += strText; // 次のフィールドの取得 Field = Format.Next(); i += 1; } //出力ファイル System.IO.StreamWriter outFile = new System.IO.StreamWriter(InPath + System.IO.Path.GetFileNameWithoutExtension(files) + ".csv", false, System.Text.Encoding.GetEncoding(932)); outFile.WriteLine(ocr_csv); outFile.Close(); //OCR変換枚数カウント _okCount++; } catch (IDRWarning ex) { // Engine.MatchFormatRotate() で // フォーマットにマッチしなかった場合の処理 if (ex.No == ErrorCode.IDR_WARN_FORM_NO_MATCH) { // NGフォルダへ移動する System.IO.File.Move(files, NgPath + "E" + System.IO.Path.GetFileName(files)); //NG枚数カウント _ngCount++; } } ocrPage++; nPage += 1; } } // いったんオーナーをアクティブにする this.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す this.Enabled = true; string finMessage = string.Empty; StringBuilder sb = new StringBuilder(); // NGメッセージ if (_ngCount > 0) { MessageBox.Show("OCR認識を正常に行うことが出来なかった画像があります。確認してください。", "確認", MessageBoxButtons.OK, MessageBoxIcon.Information); } // 終了メッセージ sb.Clear(); sb.Append("OCR認識処理が終了しました。"); sb.Append("引き続き修正確認&受け渡しデータ作成を行ってください。"); sb.Append(Environment.NewLine); sb.Append(Environment.NewLine); sb.Append("OK件数 : "); sb.Append(_okCount.ToString()); sb.Append(Environment.NewLine); sb.Append("NG件数 : "); sb.Append(_ngCount.ToString()); sb.Append(Environment.NewLine); MessageBox.Show(sb.ToString(), "処理終了", MessageBoxButtons.OK, MessageBoxIcon.Information); // OCR変換画像とCSVデータをOCR結果出力フォルダへ移動する foreach (string files in System.IO.Directory.GetFiles(InPath, "*.*")) { System.IO.File.Move(files, rePath + System.IO.Path.GetFileName(files)); } FormatList.Delete(0); } catch (System.Exception ex) { // 例外のキャッチ string errMessage = string.Empty; errMessage += "System例外が発生しました:" + Environment.NewLine; errMessage += "必要なDLL等が実行モジュールと同ディレクトリに存在するか確認してください。:" + Environment.NewLine; errMessage += ex.Message.ToString(); MessageBox.Show(errMessage, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } finally { en.Release(); } }
///------------------------------------------------------------------------------ /// <summary> /// 画像の解像度とサイズを変更する </summary> /// <param name="InPath"> /// 画像ファイル入力パス</param> /// <returns> /// true:分割を実施, false:分割ファイルなし</returns> ///------------------------------------------------------------------------------ private bool imageResize(string InPath) { // 画像を確認 if (System.IO.Directory.GetFiles(InPath, "*.tif").Count() == 0) { return(false); } RasterCodecs.Startup(); RasterCodecs cs = new RasterCodecs(); string fnm = string.Empty; //コマンドを準備します。(傾き・ノイズ除去・リサイズ) DeskewCommand Dcommand = new DeskewCommand(); DespeckleCommand Dkcommand = new DespeckleCommand(); SizeCommand Rcommand = new SizeCommand(); // オーナーフォームを無効にする this.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = this; frmP.Show(); int cImg = System.IO.Directory.GetFiles(InPath, "*.tif").Count(); int cCnt = 0; foreach (string files in System.IO.Directory.GetFiles(InPath, "*.tif")) { cCnt++; //プログレスバー表示 frmP.Text = "OCR変換画像データロード中 " + cCnt.ToString() + "/" + cImg; frmP.progressValue = cCnt * 100 / cImg; frmP.ProgressStep(); // 画像読み出す RasterImage leadImg = cs.Load(files, 0, CodecsLoadByteOrder.BgrOrGray, 1, -1); //画像補正処理 開始 ↓ **************************** try { //画像の傾きを補正します。 Dcommand.Flags = DeskewCommandFlags.DeskewImage | DeskewCommandFlags.DoNotFillExposedArea; Dcommand.Run(leadImg); } catch (Exception ex) { //MessageBox.Show(i + "画像の傾き補正エラー:" + ex.Message); } //ノイズ除去 try { Dkcommand.Run(leadImg); } catch (Exception ex) { //MessageBox.Show(i + "ノイズ除去エラー:" + ex.Message); } //解像度調整(200*200dpi) leadImg.XResolution = 200; leadImg.YResolution = 200; //A4縦サイズに変換(ピクセル単位) Rcommand.Width = 1637; Rcommand.Height = 2322; try { Rcommand.Run(leadImg); } catch (Exception ex) { //MessageBox.Show(i + "解像度調整エラー:" + ex.Message); } //画像補正処理 終了↑ **************************** // 画像保存 cs.Save(leadImg, files, RasterImageFormat.Tif, 0, 1, 1, 1, CodecsSavePageMode.Overwrite); } //LEADTOOLS入出力ライブラリを終了します。 RasterCodecs.Shutdown(); // いったんオーナーをアクティブにする this.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す this.Enabled = true; return(true); }
///------------------------------------------------------------------------------ /// <summary> /// マルチフレームの画像ファイルを頁ごとに分割する </summary> /// <param name="InPath"> /// 画像ファイル入力パス</param> /// <param name="outPath"> /// 分割後出力パス</param> /// <returns> /// true:分割を実施, false:分割ファイルなし</returns> ///------------------------------------------------------------------------------ private bool MultiTif(string InPath, string outPath, string fName) { //スキャン出力画像を確認 if (System.IO.Directory.GetFiles(InPath, "*.tif").Count() == 0) { return(false); } // 出力先フォルダがなければ作成する if (System.IO.Directory.Exists(outPath) == false) { System.IO.Directory.CreateDirectory(outPath); } // 出力先フォルダ内の全てのファイルを削除する(通常ファイルは存在しないが例外処理などで残ってしまった場合に備えて念のため) foreach (string files in System.IO.Directory.GetFiles(outPath, "*")) { System.IO.File.Delete(files); } RasterCodecs.Startup(); RasterCodecs cs = new RasterCodecs(); int _pageCount = 0; string fnm = string.Empty; //コマンドを準備します。(傾き・ノイズ除去・リサイズ) DeskewCommand Dcommand = new DeskewCommand(); DespeckleCommand Dkcommand = new DespeckleCommand(); SizeCommand Rcommand = new SizeCommand(); // オーナーフォームを無効にする this.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = this; frmP.Show(); int cImg = System.IO.Directory.GetFiles(InPath, "*.tif").Count(); int cCnt = 0; // マルチTIFを分解して画像ファイルをTRAYフォルダへ保存する foreach (string files in System.IO.Directory.GetFiles(InPath, "*.tif")) { cCnt++; //プログレスバー表示 frmP.Text = "OCR変換画像データロード中 " + cCnt.ToString() + "/" + cImg; frmP.progressValue = cCnt * 100 / cImg; frmP.ProgressStep(); // 画像読み出す RasterImage leadImg = cs.Load(files, 0, CodecsLoadByteOrder.BgrOrGray, 1, -1); // 頁数を取得 int _fd_count = leadImg.PageCount; // 頁ごとに読み出す for (int i = 1; i <= _fd_count; i++) { //ページを移動する leadImg.Page = i; // ファイル名設定 _pageCount++; fnm = outPath + fName + string.Format("{0:000}", _pageCount) + ".tif"; //画像補正処理 開始 ↓ **************************** try { //画像の傾きを補正します。 Dcommand.Flags = DeskewCommandFlags.DeskewImage | DeskewCommandFlags.DoNotFillExposedArea; Dcommand.Run(leadImg); } catch (Exception ex) { //MessageBox.Show(i + "画像の傾き補正エラー:" + ex.Message); } //ノイズ除去 try { Dkcommand.Run(leadImg); } catch (Exception ex) { //MessageBox.Show(i + "ノイズ除去エラー:" + ex.Message); } //解像度調整(200*200dpi) leadImg.XResolution = 200; leadImg.YResolution = 200; //A4縦サイズに変換(ピクセル単位) Rcommand.Width = 1637; Rcommand.Height = 2322; try { Rcommand.Run(leadImg); } catch (Exception ex) { //MessageBox.Show(i + "解像度調整エラー:" + ex.Message); } //画像補正処理 終了↑ **************************** // 画像保存 cs.Save(leadImg, fnm, RasterImageFormat.Tif, 0, i, i, 1, CodecsSavePageMode.Insert); } } //LEADTOOLS入出力ライブラリを終了します。 RasterCodecs.Shutdown(); // InPathフォルダの全てのtifファイルを削除する foreach (var files in System.IO.Directory.GetFiles(InPath, "*.tif")) { System.IO.File.Delete(files); } // いったんオーナーをアクティブにする this.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す this.Enabled = true; return(true); }
///---------------------------------------------------------------- /// <summary> /// 帳票認識ライブラリ V8.0.3 による認識処理実行 /// </summary> ///---------------------------------------------------------------- private void wrhs803LibOCR(string jobName) { // ファイル名のタイムスタンプを設定 string fnm = string.Format("{0:0000}", DateTime.Today.Year) + string.Format("{0:00}", DateTime.Today.Month) + string.Format("{0:00}", DateTime.Today.Day) + string.Format("{0:00}", DateTime.Now.Hour) + string.Format("{0:00}", DateTime.Now.Minute) + string.Format("{0:00}", DateTime.Now.Second); int sNum = 0; int ret = 0; try { // オーナーフォームを無効にする this.Enabled = false; // プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = this; frmP.Show(); // 処理する画像数を取得 int t = System.IO.Directory.GetFiles(Properties.Settings.Default.trayPath, "*.tif").Count(); // 順番に認識処理を実行 foreach (string files in System.IO.Directory.GetFiles(Properties.Settings.Default.trayPath, "*.tif")) { // 画像数カウント sNum++; // プログレス表示 frmP.Text = "OCR認識中です ... " + sNum.ToString() + "/" + t.ToString(); frmP.progressValue = sNum * 100 / t; frmP.ProgressStep(); // 標準パターンの読み込み ret = FormRecog.OcrPatternLoad(Properties.Settings.Default.ocrPatternLoadPath); // パターン読み込みに成功したとき if (ret > 0) { // 帳票認識ライブラリの制御内容を設定 FormRecog.OcrSetStatus(5, 1); // 強制終了制御 // 認識結果出力イメージファイル StringBuilder outimage = new StringBuilder(256); outimage.Append(Properties.Settings.Default.wrOutPath + System.IO.Path.GetFileName(files)); // 認識結果出力テキストファイル StringBuilder outtext = new StringBuilder(256); outtext.Append(Properties.Settings.Default.wrOutPath + System.IO.Path.GetFileNameWithoutExtension(files) + ".csv"); // 認識結果 構造体 FormRecog.FORM_RECOG_DATA dt = new FormRecog.FORM_RECOG_DATA(); // 認識処理を開始 ret = FormRecog.OcrFormRecogStart(jobName, files, outimage, outtext, ref dt, false, false); // 認識成功のとき if (ret > 0) { // 認識結果のメモリ解放 ret = FormRecog.OcrFormStructFree(ref dt); // 認識終了 ret = FormRecog.OcrFormRecogEnd(); // PC毎の出力先フォルダがなければ作成する string rPath = Properties.Settings.Default.pcPath + _outPC + @"\"; if (System.IO.Directory.Exists(rPath) == false) { System.IO.Directory.CreateDirectory(rPath); } // 出力されたイメージファイルとテキストファイルのリネーム処理を行います // READフォルダ → DATAフォルダ string inCsvFile = Properties.Settings.Default.wrOutPath + Properties.Settings.Default.wrReaderOutFile; string newFileName = rPath + fnm + sNum.ToString().PadLeft(3, '0'); wrhOutFileRename(inCsvFile, newFileName); } else { MessageBox.Show("OCR認識開始に失敗しました", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else { MessageBox.Show("OCR標準パターンの読み込みに失敗しました", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } // いったんオーナーをアクティブにする this.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す this.Enabled = true; // 終了表示 MessageBox.Show(sNum.ToString() + "件のOCR認識処理を行いました", "終了", MessageBoxButtons.OK, MessageBoxIcon.Information); // TRAYフォルダの全てのtifファイルを削除します foreach (var files in System.IO.Directory.GetFiles(Properties.Settings.Default.trayPath, "*.tif")) { System.IO.File.Delete(files); } } catch (Exception ex) { MessageBox.Show(ex.Message); throw; } }
///-------------------------------------------------------------------------------------- /// <summary> /// 給与計算用受入データ作成</summary> ///-------------------------------------------------------------------------------------- public void SaveData_kinmu() { #region 出力配列 string[] arrayCsv = null; // 出力配列 #endregion #region 出力件数変数 int sCnt = 0; // 社員出力件数 #endregion StringBuilder sb = new StringBuilder(); //Boolean pblFirstGyouFlg = true; string wID = string.Empty; string hDate = string.Empty; string hKinmutaikei = string.Empty; // 出力先フォルダがあるか?なければ作成する string cPath = global.cnfPath; if (!System.IO.Directory.Exists(cPath)) { System.IO.Directory.CreateDirectory(cPath); } try { //オーナーフォームを無効にする _preForm.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = _preForm; frmP.Show(); int rCnt = 1; // 伝票最初行フラグ //pblFirstGyouFlg = true; // 勤務票データ取得 var s = _mTbl.OrderBy(a => a.ID); foreach (var r in s) { // プログレスバー表示 frmP.Text = "クロノス用受入データ作成中です・・・" + rCnt.ToString() + "/" + s.Count().ToString(); frmP.progressValue = rCnt * 100 / s.Count(); frmP.ProgressStep(); // 無記入行は読み飛ばし if (r.勤務記号 == string.Empty && r.開始時 == string.Empty && r.開始分 == string.Empty && r.終了時 == string.Empty && r.終了分 == string.Empty && r.休憩開始時 == string.Empty && r.休憩開始分 == string.Empty && r.休憩終了時 == string.Empty && r.休憩終了分 == string.Empty && r.実働時 == string.Empty && r.実働分 == string.Empty && r.事由1 == string.Empty && r.事由2 == string.Empty) { rCnt++; continue; } sb.Clear(); //社員番号 sb.Append(r.勤務票ヘッダRow.社員番号).Append(","); // 日付 hDate = r.勤務票ヘッダRow.年.ToString() + r.勤務票ヘッダRow.月.ToString().PadLeft(2, '0') + r.日付.ToString().PadLeft(2, '0'); sb.Append(hDate).Append(","); // 勤務区分 sb.Append(r.勤務記号).Append(","); // 事由1 sb.Append(r.事由1).Append(","); //出勤時刻 if (r.開始時 != string.Empty && r.開始分 != string.Empty) { sb.Append(r.開始時 + ":" + r.開始分.PadLeft(2, '0')).Append(","); } else { sb.Append(","); } //退出時刻 if (r.終了時 != string.Empty && r.終了分 != string.Empty) { sb.Append(r.終了時 + ":" + r.終了分.PadLeft(2, '0')).Append(","); } else { sb.Append(","); } //外出1 if (r.休憩開始時 != string.Empty && r.休憩開始分 != string.Empty) { sb.Append(r.休憩開始時 + ":" + r.休憩開始分.PadLeft(2, '0')).Append(","); } else { sb.Append(","); } // 再入1 if (r.休憩終了時 != string.Empty && r.休憩終了分 != string.Empty) { sb.Append(r.休憩終了時 + ":" + r.休憩終了分.PadLeft(2, '0')).Append(","); } else { sb.Append(","); } sb.Append("").Append(","); // 外出2 sb.Append("").Append(","); // 再入2 sb.Append("").Append(","); // 外出3 sb.Append("").Append(","); // 再入3 sb.Append("").Append(","); // 外出4 sb.Append("").Append(","); // 再入4 // 事由2 sb.Append(r.事由2).Append(","); sb.Append("").Append(","); // 出勤2 sb.Append(""); // 退出2 // 配列にデータを格納します sCnt++; Array.Resize(ref arrayCsv, sCnt); arrayCsv[sCnt - 1] = sb.ToString(); // データ件数加算 rCnt++; //pblFirstGyouFlg = false; } // 勤怠CSVファイル出力 if (arrayCsv != null) { txtFileWrite(cPath, arrayCsv); } // いったんオーナーをアクティブにする _preForm.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す _preForm.Enabled = true; } catch (Exception e) { MessageBox.Show("クロノス受入データ作成中" + Environment.NewLine + e.Message, "エラー", MessageBoxButtons.OK); } finally { //if (OutData.sCom.Connection.State == ConnectionState.Open) OutData.sCom.Connection.Close(); } }
///-------------------------------------------------------------------------------------- /// <summary> /// 給与計算用受入データ作成</summary> ///-------------------------------------------------------------------------------------- public void SaveData() { #region 出力件数変数 int sCnt = 0; // 社員出力件数 #endregion StringBuilder sb = new StringBuilder(); //Boolean pblFirstGyouFlg = true; string wID = string.Empty; string hDate = string.Empty; string hKinmutaikei = string.Empty; // 出力先フォルダがあるか?なければ作成する string cPath = global.cnfPath; if (!System.IO.Directory.Exists(cPath)) { System.IO.Directory.CreateDirectory(cPath); } try { //オーナーフォームを無効にする _preForm.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = _preForm; frmP.Show(); int rCnt = 1; // 伝票最初行フラグ //pblFirstGyouFlg = true; // 勤務票データ取得 var s = _mTbl.OrderBy(a => a.ID); foreach (var r in s) { // プログレスバー表示 frmP.Text = "クロノス用受入データ作成中です・・・" + rCnt.ToString() + "/" + s.Count().ToString(); frmP.progressValue = rCnt * 100 / s.Count(); frmP.ProgressStep(); // 無記入行は読み飛ばし if (r.勤務記号 == string.Empty && r.開始時 == string.Empty && r.開始分 == string.Empty && r.終了時 == string.Empty && r.終了分 == string.Empty && r.休憩開始時 == string.Empty && r.休憩開始分 == string.Empty && r.休憩終了時 == string.Empty && r.休憩終了分 == string.Empty && r.実働時 == string.Empty && r.実働分 == string.Empty && r.事由1 == string.Empty && r.事由2 == string.Empty) { rCnt++; continue; } sb.Clear(); // 社員番号 string sNum = r.勤務票ヘッダRow.社員番号.ToString(); // 日付 hDate = r.勤務票ヘッダRow.年.ToString().Substring(2, 2) + r.勤務票ヘッダRow.月.ToString().PadLeft(2, '0') + r.日付.ToString().PadLeft(2, '0'); sb.Append(hDate).Append(","); // ---------------------------------------------------------- // 出勤データ // ---------------------------------------------------------- string st = r.開始時 + r.開始分; if (st.Trim() != string.Empty) { st = r.開始時 + r.開始分.PadLeft(2, '0'); // 配列にセット sCnt++; setArrayCSV(hDate, st, sNum, "0", "1", sCnt); } // ---------------------------------------------------------- // 退出データ // ---------------------------------------------------------- string et = r.終了時 + r.終了分; if (et.Trim() != string.Empty) { // 翌日終了のとき24を加算する 2015/04/22 if (Utility.StrtoInt(r.開始時) >= Utility.StrtoInt(r.終了時)) { et = (Utility.StrtoInt(r.終了時) + 24).ToString() + r.終了分.PadLeft(2, '0'); } else { et = r.終了時 + r.終了分.PadLeft(2, '0'); } // 配列にセット sCnt++; setArrayCSV(hDate, et, sNum, "1", "2", sCnt); } // ---------------------------------------------------------- // 外出データ // ---------------------------------------------------------- string gt = r.休憩開始時 + r.休憩開始分; if (gt.Trim() != string.Empty) { // 休憩開始時が翌日のとき24を加算する 2015/04/22 if (Utility.StrtoInt(r.開始時) > Utility.StrtoInt(r.休憩開始時)) { gt = (Utility.StrtoInt(r.休憩開始時) + 24).ToString() + r.休憩開始分.PadLeft(2, '0'); } else { gt = r.休憩開始時 + r.休憩開始分.PadLeft(2, '0'); } // 配列にセット sCnt++; setArrayCSV(hDate, gt, sNum, "1", "3", sCnt); } // ---------------------------------------------------------- // 再入データ // ---------------------------------------------------------- string rt = r.休憩終了時 + r.休憩終了分; if (rt.Trim() != string.Empty) { // 休憩終了時が翌日のとき24を加算する 2015/04/22 if (Utility.StrtoInt(r.開始時) > Utility.StrtoInt(r.休憩終了時)) { rt = (Utility.StrtoInt(r.休憩終了時) + 24).ToString() + r.休憩終了分.PadLeft(2, '0'); } else { rt = r.休憩終了時 + r.休憩終了分.PadLeft(2, '0'); } // 配列にセット sCnt++; setArrayCSV(hDate, rt, sNum, "0", "4", sCnt); } // ---------------------------------------------------------- // 事由データ_1 // ---------------------------------------------------------- if (r.事由1.Trim() != string.Empty) { // 配列にセット sCnt++; setArrayCSV(hDate, "", sNum, "2", r.事由1, sCnt); } // ---------------------------------------------------------- // 事由データ_2 // ---------------------------------------------------------- if (r.事由2.Trim() != string.Empty) { // 配列にセット sCnt++; setArrayCSV(hDate, "", sNum, "2", r.事由2, sCnt); } // ---------------------------------------------------------- // 勤務区分 // ---------------------------------------------------------- if (r.勤務記号.Trim() != string.Empty) { // 配列にセット sCnt++; setArrayCSV(hDate, "", sNum, "4", r.勤務記号, sCnt); } // データ件数加算 rCnt++; //pblFirstGyouFlg = false; } // 勤怠CSVファイル出力 if (arrayCsv != null) { txtFileWrite(cPath, arrayCsv); } // いったんオーナーをアクティブにする _preForm.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す _preForm.Enabled = true; } catch (Exception e) { MessageBox.Show("クロノス受入データ作成中" + Environment.NewLine + e.Message, "エラー", MessageBoxButtons.OK); } finally { //if (OutData.sCom.Connection.State == ConnectionState.Open) OutData.sCom.Connection.Close(); } }
/// <summary> /// CSVデータをMDBへインサートする /// </summary> private void GetCsvToMdb(string csvPath, int usr) { string hd = string.Empty; // データ件数 int cTotal = 0; // CSVが存在しなければ終了する if (System.IO.File.Exists(csvPath) == false) { return; } bool md = false; // マスタレコード削除 if (usr == global.STAFF_SELECT) { md = StaffMstDelete(); hd = "スタッフ"; } else if (usr == global.PART_SELECT) { md = PartMstDelete(); hd = "パート"; } if (md == false) { return; } // CSV読み込み行カウント int csvLine = 0; // StreamReader の新しいインスタンスを生成する System.IO.StreamReader inFile = new System.IO.StreamReader(csvPath, Encoding.Default); // 読み込んだ結果をすべて格納するための変数を宣言する string stBuffer; //オーナーフォームを無効にする this.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = this; frmP.Show(); // 件数を取得します while (inFile.Peek() >= 0) { // ファイルを 1 行ずつ読み込む inFile.ReadLine(); cTotal++; } // StreamReader の新しいインスタンスを生成する inFile = new System.IO.StreamReader(csvPath, Encoding.Default); // 読み込みできる文字がなくなるまで繰り返す while (inFile.Peek() >= 0) { // ファイルを 1 行ずつ読み込む stBuffer = inFile.ReadLine(); csvLine++; //プログレスバー表示 frmP.Text = hd + "CSVデータインポート実行中 " + csvLine.ToString() + "/" + cTotal.ToString(); frmP.progressValue = csvLine * 100 / cTotal; frmP.ProgressStep(); // ヘッダの1行目は読み飛ばす if (csvLine > 1) { // カンマ区切りで分割して配列に格納する string[] stCSV = stBuffer.Split(','); //MDBへ登録する switch (usr) { case global.STAFF_SELECT: ImportStaffCsv(stCSV); break; case global.PART_SELECT: ImportPartCsv(stCSV); break; default: break; } } } // StreamReader 閉じる inFile.Close(); // いったんオーナーをアクティブにする this.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す this.Enabled = true; }
/// ----------------------------------------------------------------------------- /// <summary> /// 物品受領書・伝票番号をMDBへ読み込み </summary> /// ----------------------------------------------------------------------------- public int getCSVFile() { // 対象CSVファイル数を取得 string _inPath = Properties.Settings.Default.imgOutPath; denCnt = System.IO.Directory.GetFiles(_inPath, "*.csv").Count(); // 読込件数 int dCnt = 0; // CSVファイルがなければ終了 if (denCnt == 0) { return(0); } // オーナーフォームを無効にする _Owner.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = _Owner; frmP.Show(); // データセット DSLGDataSet dts = new DSLGDataSet(); // テーブルアダプタ DSLGDataSetTableAdapters.伝票番号TableAdapter adp = new DSLGDataSetTableAdapters.伝票番号TableAdapter(); // テーブルアダプタに読み取りデータを読み込む adp.Fill(dts.伝票番号); try { // CSVデータをMDBへ取込 int cCnt = 0; foreach (string files in System.IO.Directory.GetFiles(_inPath, "*.csv")) { // 件数カウント cCnt++; //プログレスバー表示 frmP.Text = "物品受領書画像ロード中 " + cCnt.ToString() + "/" + denCnt.ToString(); frmP.progressValue = cCnt * 100 / denCnt; frmP.ProgressStep(); ////////OCR処理対象のCSVファイルかファイル名の文字数を検証する //////string fn = Path.GetFileName(files); int denNum = 0; string imgName = string.Empty; // CSVファイルインポート var s = System.IO.File.ReadAllLines(files, Encoding.Default); foreach (var stBuffer in s) { // カンマ区切りで分割して配列に格納する string[] stCSV = stBuffer.Split(','); // 伝票番号 if (stCSV[2] != string.Empty) { denNum = Utility.StrtoInt(Utility.GetStringSubMax(stCSV[2], 6)); } else if (stCSV[3] != string.Empty) { denNum = Utility.StrtoInt(Utility.GetStringSubMax(stCSV[3], 6)); } else { continue; } // 画像名 imgName = Utility.GetStringSubMax(stCSV[1].Trim(), 21); // 読込件数 dCnt++; // データセットに読み取りデータを追加する dts.伝票番号.Add伝票番号Row(denNum, imgName, DateTime.Today, "", global.STATUS_UNVERI, DateTime.Now); } } // データベースへ反映 adp.Update(dts); //CSVファイルを削除する foreach (string files in System.IO.Directory.GetFiles(_inPath, "*.csv")) { System.IO.File.Delete(files); } // いったんオーナーをアクティブにする _Owner.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す _Owner.Enabled = true; // 戻り値 return(dCnt); } catch (Exception ex) { MessageBox.Show(ex.Message, "物品受領書伝票№読み込み処理", MessageBoxButtons.OK); return(dCnt); } finally { } }
///-------------------------------------------------------------------------------------- /// <summary> /// 楽商受入データ作成</summary> ///-------------------------------------------------------------------------------------- public void SaveData() { // 楽商データ作成先パス取得 var ss = dts.環境設定.Single(a => a.ID == 1); string okPath = ss.受け渡しデータ作成パス; // 事前に入力された日付を採用する 2017/10/23 _numDate = ss.当日日付; dtSeq = ss.連番; //if (ss.Is当日日付Null()) //{ // _numDate = DateTime.Today; // dtSeq = 0; //} //else if (ss.当日日付 != DateTime.Today) //{ // _numDate = DateTime.Today; // dtSeq = 0; //} //else //{ // _numDate = ss.当日日付; // dtSeq = ss.連番; //} #region 出力配列 string[] arrayCsv = null; // 出力配列 #endregion #region 出力件数変数 int sCnt = 0; // 社員出力件数 #endregion StringBuilder sb = new StringBuilder(); global gl = new global(); // 出力先フォルダがあるか?なければ作成する if (!System.IO.Directory.Exists(okPath)) { System.IO.Directory.CreateDirectory(okPath); } DateTime dt = DateTime.Now; string ts = dt.Year + dt.Month.ToString().PadLeft(2, '0') + dt.Day.ToString().PadLeft(2, '0') + dt.Hour.ToString().PadLeft(2, '0') + dt.Minute.ToString().PadLeft(2, '0') + dt.Second.ToString().PadLeft(2, '0'); try { //オーナーフォームを無効にする _preForm.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = _preForm; frmP.Show(); int rCnt = 1; // 発注書データ取得 var s = _hTbl.OrderBy(a => a.ID); foreach (var r in s) { // プログレスバー表示 frmP.Text = "楽商データ作成中です・・・" + rCnt.ToString() + "/" + s.Count().ToString(); frmP.progressValue = rCnt * 100 / s.Count(); frmP.ProgressStep(); // 共通データを作成する string uCSV = getHeadCsv(r, ts, rCnt, ss); // 商品パターン・注文数クラスインスタンス作成 hinSuu[] hS = new hinSuu[40]; setHinSuuArray(ref hS, r); int iX = 1; for (int i = 0; i < hS.Length; i++) { if (Utility.StrtoInt(hS[i].Suu) != 0) { sb.Clear(); sb.Append(iX.ToString()).Append("\t"); sb.Append(hS[i].hin.ToString().PadLeft(8, '0')).Append("\t"); sb.Append(getHinName(hS[i].hin.ToString().PadLeft(8, '0'))).Append("\t"); sb.Append(hS[i].Suu).Append("\t"); sb.Append(DateTime.Now); // 配列にデータを格納します sCnt++; Array.Resize(ref arrayCsv, sCnt); arrayCsv[sCnt - 1] = uCSV + sb.ToString(); iX++; } } rCnt++; } // CSVファイル出力 if (arrayCsv != null) { txtFileWrite(okPath, arrayCsv); } // いったんオーナーをアクティブにする _preForm.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す _preForm.Enabled = true; // 当日連番を更新 //ss.当日日付 = _numDate; // 2017/10/23 ss.連番 = dtSeq; cnfAdp.Update(dts.環境設定); } catch (Exception e) { MessageBox.Show("楽商データ作成中" + Environment.NewLine + e.Message, "エラー", MessageBoxButtons.OK); } finally { //if (OutData.sCom.Connection.State == ConnectionState.Open) OutData.sCom.Connection.Close(); } }
///-------------------------------------------------------------------------------------- /// <summary> /// 楽商受入データ作成:キャンペーン発注書</summary> ///-------------------------------------------------------------------------------------- public void SaveData(clsCamData [] camArray) { // 楽商データ作成先パス取得 var ss = dts.環境設定.Single(a => a.ID == 1); string okPath = ss.受け渡しデータ作成パス; // 事前に入力された日付を採用する 2017/10/23 _numDate = ss.当日日付; dtSeq = ss.連番; //if (ss.Is当日日付Null()) //{ // _numDate = DateTime.Today; // dtSeq = 0; //} //else if (ss.当日日付 != DateTime.Today) //{ // _numDate = DateTime.Today; // dtSeq = 0; //} //else //{ // _numDate = ss.当日日付; // dtSeq = ss.連番; //} #region 出力配列 string[] arrayCsv = null; // 出力配列 #endregion #region 出力件数変数 int sCnt = 0; // 社員出力件数 #endregion StringBuilder sb = new StringBuilder(); global gl = new global(); // 出力先フォルダがあるか?なければ作成する if (!System.IO.Directory.Exists(okPath)) { System.IO.Directory.CreateDirectory(okPath); } DateTime dt = DateTime.Now; string ts = dt.Year + dt.Month.ToString().PadLeft(2, '0') + dt.Day.ToString().PadLeft(2, '0') + dt.Hour.ToString().PadLeft(2, '0') + dt.Minute.ToString().PadLeft(2, '0') + dt.Second.ToString().PadLeft(2, '0'); try { //オーナーフォームを無効にする _preForm.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = _preForm; frmP.Show(); int rCnt = 1; // キャンペーンデータ配列取得 for (int n = 0; n < camArray.Length; n++) { // プログレスバー表示 frmP.Text = "楽商データ作成中です・・・" + n + "/" + camArray.Length; frmP.progressValue = n * 100 / camArray.Length; frmP.ProgressStep(); // 社内伝票番号連番インクリメント dtSeq++; // 0が商品、1がプレゼント for (int sp = 0; sp < 2; sp++) { int r = 0; // 行番号 // 共通データを作成する string uCSV = getHeadCsv(camArray, n, ts, rCnt, ss, sp); for (int iX = 0; iX < 15; iX++) { if (camArray[n].cCheck[iX]) { // 2017/11/19 //r++; //sb.Clear(); //sb.Append(r.ToString()).Append("\t"); if (sp == 0) { if (camArray[n].cSSu[iX] > 0) // 数量有りを登録対象にする 2017/11/19 { r++; sb.Clear(); sb.Append(r.ToString()).Append("\t"); sb.Append(camArray[n].cSCode[iX].ToString().PadLeft(8, '0')).Append("\t"); sb.Append(camArray[n].cSName[iX].PadLeft(8, '0')).Append("\t"); sb.Append(camArray[n].cSSu[iX].ToString()).Append("\t"); // 2017.11.19 sb.Append(DateTime.Now); // 配列にデータを格納します: 2017.11.19 sCnt++; Array.Resize(ref arrayCsv, sCnt); arrayCsv[sCnt - 1] = uCSV + sb.ToString(); } } else { if (camArray[n].cPSu[iX] > 0) // 数量有りを登録対象にする 2017/11/19 { r++; sb.Clear(); sb.Append(r.ToString()).Append("\t"); sb.Append(camArray[n].cPCode[iX].ToString().PadLeft(8, '0')).Append("\t"); sb.Append(camArray[n].cPName[iX].PadLeft(8, '0')).Append("\t"); sb.Append(camArray[n].cPSu[iX].ToString()).Append("\t"); // 2017.11.19 sb.Append(DateTime.Now); // 配列にデータを格納します: 2017.11.19 sCnt++; Array.Resize(ref arrayCsv, sCnt); arrayCsv[sCnt - 1] = uCSV + sb.ToString(); } } // 2017.11.19 //sb.Append(DateTime.Now); //// 配列にデータを格納します //sCnt++; //Array.Resize(ref arrayCsv, sCnt); //arrayCsv[sCnt - 1] = uCSV + sb.ToString(); } } rCnt++; } } // 楽商受入CSVファイル出力 if (arrayCsv != null) { txtFileWrite(okPath, arrayCsv); } // いったんオーナーをアクティブにする _preForm.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す _preForm.Enabled = true; // 当日連番を更新 //ss.当日日付 = _numDate; // 2017/10/23 ss.連番 = dtSeq; cnfAdp.Update(dts.環境設定); } catch (Exception e) { MessageBox.Show("楽商データ作成中" + Environment.NewLine + e.Message, "エラー", MessageBoxButtons.OK); } finally { //if (OutData.sCom.Connection.State == ConnectionState.Open) OutData.sCom.Connection.Close(); } }
/// <summary> /// OCR処理を実施します /// </summary> /// <param name="InPath">入力パス</param> /// <param name="NgPath">NG出力パス</param> /// <param name="rePath">OCR変換結果出力パス</param> /// <param name="FormatName">書式ファイル名</param> /// <param name="fCnt">書式ファイルの件数</param> private void ocrMain(string InPath, string NgPath, string rePath, string FormatName, int fCnt) { IEngine en = null; // OCRエンジンのインスタンスを保持 string ocr_csv = string.Empty; // OCR変換出力CSVファイル int _ngCount = 0; // フォーマットアンマッチ画像枚数 string fnm = string.Empty; // ファイル名 string path2Fdir = Properties.Settings.Default.instDir + global.DIR_2F; // 2F伝票フォルダ try { // 指定された出力先フォルダがなければ作成する if (System.IO.Directory.Exists(rePath) == false) { System.IO.Directory.CreateDirectory(rePath); } // 指定されたNGの場合の出力先フォルダがなければ作成する if (System.IO.Directory.Exists(NgPath) == false) { System.IO.Directory.CreateDirectory(NgPath); } // 2F伝票フォルダがなければ作成する if (System.IO.Directory.Exists(path2Fdir) == false) { System.IO.Directory.CreateDirectory(path2Fdir); } // OCRエンジンのインスタンスの生成・取得 en = EngineFactory.GetEngine(); if (en == null) { // エンジンが他で取得されている場合は、Release() されるまで取得できない System.Console.WriteLine("SDKは使用中です"); return; } //オーナーフォームを無効にする this.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = this; frmP.Show(); IFormatList FormatList; IFormat Format; IField Field; int nPage; int ocrPage = 0; int fileCount = 0; // フォーマットのロード・設定 FormatList = en.FormatList; FormatList.Add(FormatName); // tifファイルの認識 foreach (string files in System.IO.Directory.GetFiles(InPath, "*.tif")) { nPage = 1; while (true) { try { // 対象画像を設定する en.SetBitmap(files, nPage); //プログレスバー表示 fileCount++; frmP.Text = "OCR変換処理実行中 " + fileCount.ToString() + "/" + fCnt.ToString(); frmP.progressValue = fileCount * 100 / fCnt; frmP.ProgressStep(); } catch (IDRException ex) { // ページ読み込みエラー if (ex.No == ErrorCode.IDR_ERROR_FORM_FILEREAD) { // ページの終了 break; } else { // 例外のキャッチ MessageBox.Show("例外が発生しました:Error No ={0:X}", ex.No.ToString()); } } //////Console.WriteLine("-----" + strImageFile + "の" + nPage + "ページ-----"); // 現在ロードされている画像を自動的に傾き補正する en.AutoSkew(); // 傾き角度の取得 double angle = en.GetSkewAngle(); //////System.Console.WriteLine("時計回りに" + angle + "度傾き補正を行いました"); try { // 現在ロードされている画像を自動回転してマッチする番号を取得する Format = en.MatchFormatRotate(); int direct = en.GetRotateAngle(); //画像ロード RasterCodecs.Startup(); RasterCodecs cs = new RasterCodecs(); //RasterImage img; // 描画時に使用される速度、品質、およびスタイルを制御します。 //RasterPaintProperties prop = new RasterPaintProperties(); //prop = RasterPaintProperties.Default; //prop.PaintDisplayMode = RasterPaintDisplayModeFlags.Resample; //leadImg.PaintProperties = prop; RasterImage img = cs.Load(files, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1); RotateCommand rc = new RotateCommand(); rc.Angle = (direct) * 90 * 100; rc.FillColor = new RasterColor(255, 255, 255); rc.Flags = RotateCommandFlags.Resize; rc.Run(img); //rc.Run(leadImg.Image); //cs.Save(leadImg.Image, files, RasterImageFormat.Tif, 0, 1, 1, 1, CodecsSavePageMode.Overwrite); cs.Save(img, files, RasterImageFormat.CcittGroup4, 0, 1, 1, 1, CodecsSavePageMode.Overwrite); // マッチしたフォーマットに登録されているフィールド数を取得 int fieldNum = Format.NumOfFields; int matchNum = Format.FormatNo + 1; //////System.Console.WriteLine(matchNum + "番目のフォーマットがマッチ"); int i = 1; int fIndex = 0; ocr_csv = "*,"; // ファイルに画像ファイル名フィールドを付加します ocr_csv += System.IO.Path.GetFileName(files); // 認識されたフィールドを順次読み出します Field = Format.Begin(); // 3F伝票処理時に2F伝票を判定する 2013/07/01 if (FormatName == Properties.Settings.Default.instDir + Properties.Settings.Default.fmtHPath) { string fldText = string.Empty; while (Field != null) { // 指定フィールドを認識し、テキストを取得(対象は最終フィールド) fldText = Field.ExtractFieldText(); // 次のフィールドの取得 Field = Format.Next(); } // 再度認識されたフィールドを順次読み出します 2013/07/01 Field = Format.Begin(); // 2F書式伝票のとき(指定フィールドが空白である) if (fldText.Trim().Length == 0) { // 2F伝票フォルダへ移動する System.IO.File.Move(files, path2Fdir + System.IO.Path.GetFileName(files)); // ページをカウントして次の画像のOCR処理へ ocrPage++; nPage += 1; continue; } } // 伝票フィールド編集 while (Field != null) { //カンマ付加 if (ocr_csv != string.Empty) { ocr_csv += ","; } // 指定フィールドを認識し、テキストを取得 string strText = Field.ExtractFieldText(); // 年月日のとき各々独立フィールドに分解します if (fIndex == 1) { string strYYMMDD = strText.PadRight(6, '0'); string ymd = strYYMMDD.Substring(0, 2) + "," + strYYMMDD.Substring(2, 2) + "," + strYYMMDD.Substring(4, 2); ocr_csv += ymd; } else if (fIndex != 165) { ocr_csv += strText; // 他のフィールドで最終フィールド以外(2013/07/01) } // 摘要複写欄 if (fIndex == 10 || fIndex == 19 || fIndex == 28 || fIndex == 37 || fIndex == 46 || fIndex == 55 || fIndex == 64 || fIndex == 73 || fIndex == 82 || fIndex == 91 || fIndex == 100 || fIndex == 109 || fIndex == 118 || fIndex == 127 || fIndex == 136 || fIndex == 145 || fIndex == 154 || fIndex == 163) { ocr_csv += ",0"; } // 改行 if (fIndex == 2 || fIndex == 11 || fIndex == 20 || fIndex == 29 || fIndex == 38 || fIndex == 47 || fIndex == 56 || fIndex == 65 || fIndex == 74 || fIndex == 83 || fIndex == 92 || fIndex == 101 || fIndex == 110 || fIndex == 119 || fIndex == 128 || fIndex == 137 || fIndex == 146 || fIndex == 155) { // ヘッダ業改行のとき明細行数を付加 if (fIndex == 2) { ocr_csv += ","; ocr_csv += global.MAXGYOU_PRN.ToString(); } ocr_csv += Environment.NewLine; // 取消欄 ocr_csv += "0"; } // 次のフィールドの取得 Field = Format.Next(); i += 1; // フィールドインデックスインクリメント fIndex++; } //出力ファイル System.IO.StreamWriter outFile = new System.IO.StreamWriter(InPath + System.IO.Path.GetFileNameWithoutExtension(files) + ".csv", false, System.Text.Encoding.GetEncoding(932)); outFile.WriteLine(ocr_csv); outFile.Close(); //OCR変換枚数カウント _okCount++; } catch (IDRWarning ex) { // Engine.MatchFormatRotate() で // フォーマットにマッチしなかった場合、空ファイルを出力します if (ex.No == ErrorCode.IDR_WARN_FORM_NO_MATCH) { //////// アンマッチフォルダへ移動する //////System.IO.File.Move(files, NgPath + System.IO.Path.GetFileName(files)); // 区切り文字 ocr_csv = "*,"; // ファイルに画像ファイル名フィールドを付加します ocr_csv += System.IO.Path.GetFileName(files); // ヘッダ部 (決算仕訳区分、年、月、日、伝票№(NG)) ocr_csv += ",0,,,,NG," + global.MAXGYOU_PRN.ToString() + Environment.NewLine; //// 明細部 string meisai = "0,,,,,,,,,0," + Environment.NewLine; for (int i = 0; i < 18; i++) { ocr_csv += meisai; } //出力ファイル System.IO.StreamWriter outFile = new System.IO.StreamWriter(InPath + System.IO.Path.GetFileNameWithoutExtension(files) + ".csv", false, System.Text.Encoding.GetEncoding(932)); outFile.WriteLine(ocr_csv); outFile.Close(); _ngCount++; //NG枚数カウント } } ocrPage++; nPage += 1; } } // いったんオーナーをアクティブにする this.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す this.Enabled = true; // OCR変換画像とCSVデータをOCR結果出力フォルダへ移動する foreach (string files in System.IO.Directory.GetFiles(InPath, "*.*")) { System.IO.File.Move(files, rePath + System.IO.Path.GetFileName(files)); } // 終了メッセージ (2F伝票画像がなければ処理終了とみなす) var f2Tif = System.IO.Directory.GetFileSystemEntries(Properties.Settings.Default.instDir + global.DIR_2F, "*.tif"); if (f2Tif.Length == 0) { string finMessage = string.Empty; StringBuilder sb = new StringBuilder(); sb.Append("OCR認識処理が終了しました。"); sb.Append("引き続き修正確認&受け渡しデータ作成を行ってください。"); sb.Append(Environment.NewLine); sb.Append(Environment.NewLine); sb.Append("OK件数 : "); sb.Append(_okCount.ToString()); sb.Append(Environment.NewLine); sb.Append("NG件数 : "); sb.Append(_ngCount.ToString()); sb.Append(Environment.NewLine); MessageBox.Show(sb.ToString(), "処理終了", MessageBoxButtons.OK, MessageBoxIcon.Information); } FormatList.Delete(0); } catch (System.Exception ex) { // 例外のキャッチ string errMessage = string.Empty; errMessage += "System例外が発生しました:" + Environment.NewLine; errMessage += "必要なDLL等が実行モジュールと同ディレクトリに存在するか確認してください。:" + Environment.NewLine; errMessage += ex.Message.ToString(); MessageBox.Show(errMessage, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } finally { en.Release(); } }
/// ----------------------------------------------------------------- /// <summary> /// 勤務報告書CSVデータを一枚ごとに分割する </summary> /// <param name="OCRMODE"> /// スキャンモード 1:スキャナ, 2:イメージファイル</param> /// ----------------------------------------------------------------- private void LoadCsvDivide(string OCRMODE, string fnm) { string imgName = string.Empty; // 画像ファイル名 string firstFlg = global.FLGON; global.pblDenNum = 0; // 枚数を0にセット string[] stArrayData; // CSVファイルを1行単位で格納する配列 string newFnm = string.Empty; // 新ファイル名 string inPath = string.Empty; // OCR認識モードごとの入力パス string inFilePath = string.Empty; // OCR認識モードごとの入力ファイル名 //string dataMode = string.Empty; // 勤務管理表種別(1:社員, 2:パート・アルバイト, 3:出向社員) // 入力ファイルパス if (OCRMODE == global.OCR_SCAN) // スキャナ { inPath = Properties.Settings.Default.scanWinoutPath; inFilePath = Properties.Settings.Default.scanWinoutPath + Properties.Settings.Default.winReaderOutFile; } else if (OCRMODE == global.OCR_IMAGE) // 画像 { inPath = Properties.Settings.Default.imageWinoutPath; inFilePath = Properties.Settings.Default.imageWinoutPath + Properties.Settings.Default.winReaderOutFile; } // CSVデータの存在を確認します if (!System.IO.File.Exists(inFilePath)) { return; } // StreamReader の新しいインスタンスを生成する //入力ファイル System.IO.StreamReader inFile = new System.IO.StreamReader(inFilePath, Encoding.Default); // 読み込んだ結果をすべて格納するための変数を宣言する string stResult = string.Empty; string stBuffer; // 行番号 int sRow = 0; // オーナーフォームを無効にする this.Enabled = false; // プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = this; frmP.Show(); // 勤務報告書枚数取得 string[] t = System.IO.Directory.GetFiles(inPath, "*.tif"); // 読み込みできる文字がなくなるまで繰り返す while (inFile.Peek() >= 0) { // ファイルを 1 行ずつ読み込む stBuffer = inFile.ReadLine(); // カンマ区切りで分割して配列に格納する stArrayData = stBuffer.Split(','); //先頭に「*」か「#」があったら新たな伝票なのでCSVファイル作成 if ((stArrayData[0] == "*")) { //最初の伝票以外のとき if (firstFlg == global.FLGOFF) { //ファイル書き出し outFileWrite(stResult, inPath + imgName, newFnm); } //伝票枚数カウント global.pblDenNum++; firstFlg = global.FLGOFF; // プログレス表示 frmP.Text = "OCRデータロード中"; frmP.progressValue = global.pblDenNum * 100 / t.Length; frmP.ProgressStep(); // 伝票連番 dNo++; // ファイル名 newFnm = fnm + dNo.ToString().PadLeft(3, '0'); // 画像ファイル名を取得 imgName = stArrayData[1]; //// 勤務報告書種別を取得(1:本社、2:静岡、3:大阪製造部) //dataMode = stArrayData[2]; //文字列バッファをクリア stResult = string.Empty; // 文字列再構成(画像ファイル名を変更する) stBuffer = string.Empty; for (int i = 0; i < stArrayData.Length; i++) { if (stBuffer != string.Empty) { stBuffer += ","; } // 画像ファイル名を変更する if (i == 1) { stArrayData[i] = newFnm + ".tif"; // 画像ファイル名を変更 } // フィールド結合 string sta = stArrayData[i].Trim(); stBuffer += sta; } sRow = 0; } else { sRow++; } // 読み込んだものを追加で格納する stResult += (stBuffer + Environment.NewLine); } // いったんオーナーをアクティブにする this.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す this.Enabled = true; // 後処理 if (global.pblDenNum > 0) { // ファイル書き出し outFileWrite(stResult, inPath + imgName, newFnm); // 入力ファイルを閉じる inFile.Close(); // 入力ファイル削除 : "txtout.csv" Utility.FileDelete(inPath, Properties.Settings.Default.winReaderOutFile); // 画像ファイル削除 : "WRH***.tif" Utility.FileDelete(inPath, "WRH*.tif"); // 終了表示 MessageBox.Show(global.pblDenNum.ToString() + "件の勤務報告書を処理しました", "終了", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
///-------------------------------------------------------------------------------------- /// <summary> /// 給与計算用受入データ作成</summary> ///-------------------------------------------------------------------------------------- public void SaveData() { #region 出力配列 string[] arrayShain = null; // 出力配列 #endregion #region 出力件数変数 int sCnt = 0; // 社員出力件数 #endregion Boolean pblFirstGyouFlg = true; string wID = string.Empty; // 出力先フォルダがあるか?なければ作成する string cPath = global.cnfPath; if (!System.IO.Directory.Exists(cPath)) { System.IO.Directory.CreateDirectory(cPath); } try { //オーナーフォームを無効にする _preForm.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = _preForm; frmP.Show(); // 勤務票ヘッダレコード件数取得 int cTotal = _hTbl.Count(); int rCnt = 1; // 伝票最初行フラグ pblFirstGyouFlg = true; // 勤務票ヘッダデータ取得 var s = _hTbl.OrderBy(a => a.ID); foreach (var r in s) { // プログレスバー表示 frmP.Text = "給与計算用受入データ作成中です・・・" + rCnt.ToString() + "/" + cTotal.ToString(); frmP.progressValue = rCnt * 100 / cTotal; frmP.ProgressStep(); // 出力データ初期化 InitOutRec(); // 社員番号 sShainNo = r.人番号.ToString().PadLeft(global.ShainMaxLength, '0'); // 集計処理 setDataShain(r); // 配列にデータを出力 sCnt++; Array.Resize(ref arrayShain, sCnt); arrayShain[sCnt - 1] = getTextShainData(); // データ件数加算 rCnt++; pblFirstGyouFlg = false; } // 勤怠テキストファイル出力 if (arrayShain != null) { txtFileWrite(cPath + TXTFILE_SHAIN + ".csv", arrayShain); } // いったんオーナーをアクティブにする _preForm.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す _preForm.Enabled = true; } catch (Exception e) { MessageBox.Show("給与計算用受入データ作成中" + Environment.NewLine + e.Message, "エラー", MessageBoxButtons.OK); } finally { //if (OutData.sCom.Connection.State == ConnectionState.Open) OutData.sCom.Connection.Close(); } }
///-------------------------------------------------------------------------------------- /// <summary> /// 給与大臣受入データ作成</summary> ///-------------------------------------------------------------------------------------- public void SaveData() { #region 出力配列 string[] arrayShain = null; // 社員出力配列 string[] arrayPart = null; // パート出力配列 string[] arrayShukko = null; // 出向社員出力配列 #endregion #region 出力件数変数 int sCnt = 0; // 社員出力件数 int pCnt = 0; // パート出力件数 int uCnt = 0; // 出向社員出力件数 #endregion Boolean pblFirstGyouFlg = true; string wID = string.Empty; // 出力先フォルダがあるか?なければ作成する string cPath = global.cnfPath; if (!System.IO.Directory.Exists(cPath)) { System.IO.Directory.CreateDirectory(cPath); } try { //オーナーフォームを無効にする _preForm.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = _preForm; frmP.Show(); // 勤務票ヘッダレコード件数取得 int cTotal = _hTbl.Count(); int rCnt = 1; // 伝票最初行フラグ pblFirstGyouFlg = true; // 勤務票ヘッダデータ取得 var s = _hTbl.OrderBy(a => a.ID); foreach (var r in s) { // プログレスバー表示 frmP.Text = "給与大臣受入データ作成中です・・・" + rCnt.ToString() + "/" + cTotal.ToString(); frmP.progressValue = rCnt * 100 / cTotal; frmP.ProgressStep(); // 帳票番号別の準備 switch (r.帳票番号.ToString()) { case global.SHAIN_ID: // 社員 // 出力データ初期化 InitOutRecShainShukko(); // 社員番号 sShainNo = r.人番号.ToString().PadLeft(global.ShainMaxLength, '0'); // カット時間 sCutTimes = r.カット時 * 60 + r.カット分; // 特殊手当時間 sTokushuTeate = r.特殊手当時 * 60 + r.特殊手当分; break; case global.PART_ID: // パート // 出力データ初期化 InitOutRecPart(); // 社員番号 pShainNo = r.人番号.ToString().PadLeft(global.ShainMaxLength, '0'); // 特別手当区分 pTokubetsuKbn = r.特別手当区分; break; case global.SHUKKOU_ID: // 出向社員 // 出力データ初期化 InitOutRecShainShukko(); // 社員番号 sShainNo = r.人番号.ToString().PadLeft(global.ShainMaxLength, '0'); // カット時間 sCutTimes = r.カット時 * 60 + r.カット分; // 特殊手当時間 sTokushuTeate = r.特殊手当時 * 60 + r.特殊手当分; break; default: break; } // 勤務票明細データ取得 var m = _mTbl.Where(a => a.ヘッダID == r.ID); // 明細集計処理 foreach (var t in m) { switch (r.帳票番号.ToString()) { case global.SHAIN_ID: // 社員 SetDataShainShukko(t); break; case global.PART_ID: // パート SetDataPart(t); break; case global.SHUKKOU_ID: // 出向社員 SetDataShainShukko(t); break; default: break; } } // 配列にデータを出力 switch (r.帳票番号.ToString()) { case global.SHAIN_ID: // 社員 sCnt++; Array.Resize(ref arrayShain, sCnt); arrayShain[sCnt - 1] = getTextShainData(); break; case global.PART_ID: // パート pCnt++; Array.Resize(ref arrayPart, pCnt); arrayPart[pCnt - 1] = getTextPartData(); break; case global.SHUKKOU_ID: // 出向社員 uCnt++; Array.Resize(ref arrayShukko, uCnt); arrayShukko[uCnt - 1] = getTextShukkoData(); break; default: break; } //データ件数加算 rCnt++; pblFirstGyouFlg = false; } // 社員勤怠テキストファイル出力 if (arrayShain != null) { txtFileWrite(cPath + TXTFILE_SHAIN + ".txt", arrayShain); } // パート勤怠テキストファイル出力 if (arrayPart != null) { txtFileWrite(cPath + TXTFILE_PART + ".txt", arrayPart); } // 出向社員勤怠テキストファイル出力 if (arrayShukko != null) { txtFileWrite(cPath + TXTFILE_SHUKKO + ".txt", arrayShukko); } // いったんオーナーをアクティブにする _preForm.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す _preForm.Enabled = true; } catch (Exception e) { MessageBox.Show("給与大臣受入データ作成中" + Environment.NewLine + e.Message, "エラー", MessageBoxButtons.OK); } finally { //if (OutData.sCom.Connection.State == ConnectionState.Open) OutData.sCom.Connection.Close(); } }