表題通り、「0 で除算しようとしました。」が発生します。
発生する状況として、パソコンを買い換えたため新たに VS2015 をインストールしました。
そして、このエラーの発生したアプリをプロジェクトごとコピーしました。
もちろんその他のプロジェクトも全て新しいパソコンにコピーしています。
このプロジェクト以外は、特に問題ないようです。
エラーの起きる場所は、
WPF
1 2 hunspell = new Hunspell("en_us.aff", "en_us.dic"); 3 4 // カスタム辞書のデータを読む 5 string mei = dirPath + @"DataFiles\en_US_OpenMedSpel.dic"; 6 if (!System.IO.File.Exists(mei)) 7 { 8 using (System.IO.File.Create(mei)) { } 9 } 10 11 string[] lines = System.IO.File.ReadAllLines(mei); 12 foreach (var line in lines) 13 { 14 string moji = line.Trim(); // 前後の空白を消す 15 hunspell.Add(moji); ここでエラーが発生します。hunspell は、ヌルではありません。 16 }
このアプリは、NHunspellWrapper クラスを使用しています。
新たにインストールしたのではなく前パソコンよりプロジェクトごとコピーしました。
「0 で除算しようとしました。」というエラーですが、ググってもなかなかいい解説が見つかりません。
このエラーがでる状況など体験談でもいいのでアドバイスください。
環境 Windows10 WPF C# VS2015
エラーメッセージをそのままコピペで提示しましょう
VSならスクリーンショットかな
Hunspell の Add メソッドにバグがあるんでしょう。もしくは moji が Add してはいけないものなんでしょう。
お世話になります。
エラーメッセージは、純粋に「0 で除算しようとしました。」です。
try catch の Exception e で e.Message に上記エラーメッセージが吐き出されています。
> Add メソッドにバグがあるんでしょう
前パソコンでは、この部分は動作していたので、新しいパソコンで起きる理由が不明なのです。
データも同じなので Add していけないもの!?ではないと思いますが…
Hunspellクラスにバグが有るってことですな。
そこんとこのコードを提示しよう
stacktrace読んで発生場所の特定もできないなら「このエラーがでる状況など体験談」なんか聞いても解決できると思えんけども。
catch しているということは、例外が発生した場所もそこではない可能性があるということですね?
たとえば読み込みに失敗してデータが得られなかった時、データ数で何かを割ろうとすると 0 除算になります。
Trace がうまくできませんが、
https://www.codeproject.com/articles/73802/nhunspell-component-for-visual-studio
がサンプルで、このサンプルは今のパソコンでも動作しました。
プロジェクトのコピーがうまくいってないのかその辺の問題のような気がします。
もう少し調べます。
時間が経過していますがまだ、理由がわかりません。
自分の思いとしては、初期化がうまくいってないように思えますが、確たるものはありません。
未解決のままですが、クローズします。
実際のコードと違うサンプルが出されただけで一切の説明がないので、うまくできないとか、うまくいってないという意味がわかりませんが、例外が出た時にスタックトレースを読んでみてください。そうすれば実際にはどこで例外が出たのかがわかります。
お世話になります。
上記の件、「0で除算しました」のエラーを吐くのみだったので理由がわかりませんでしたが、
上記のコードを呼び出すとき下記のエラーが吐き出されるようになりました。
追加情報:ファイルまたはアセンブリ 'NHunspell, Version=0.9.2.0, Culture=neutral, PublicKeyToken=30800c0502dd389c'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。今現在は、ここまでしかわかりません。
下記のコードは NHunspellWrapper クラスで初期化時に呼ばれているものです。
上記のエラーは、testアプリの App.config に設定のないものについて言ってきています。
また、NHunspellWrapper WinForm で書かれていました。ツールボックスに spellWorker なるものが WinFormで使用できるようですが、 WPF ではそのようなコントロールは作成されていません。
どうやら初期化・使い方?が異なっているかもしれません。現時点では不明ですが、
質問の本題部分で、「パソコンを新しいものに変えて動作しなくなった」と上記の初期化の問題は同じものと思えず混乱しています。OSは同じですが、細かいバージョンまでは不明です。
public class NHunspellWrapper
{
public NHunspellWrapper()
: this("en_US.aff", "en_US.dic", null, new SpellingFormBasic())
{
}
/// <param name="affFile">"en_us.aff"</param>
/// <param name="dicFile">"en_us.dic"</param>
public NHunspellWrapper(string affFile, string dicFile,
ISpellingControl textEditor, ISpellingWindow spellForm)
{
try
{
hunspell = new Hunspell(affFile, dicFile);
var chk = hunspell.Spell("with");
App.config は以下で全文
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>
それは 0 除算ではなく、必要なアセンブリが参照されていないという例外です。NHunspell を参照に追加してください。無ければインストールしてください。
お世話になります。
どうやら、NHunspellWrapper クラスを WPF 側から呼び出すのがうまくいかないようです。
ラッパークラスを使わず直接下記で呼び出すことでうまくいっているように思います。
以上でクローズします。ありがとうございました。
var hunspell = new Hunspell("en_us.aff", "en_us.dic");
string[] lines = System.IO.File.ReadAllLines("CustomWords-en_US.txt");
foreach (var line in lines)
{
hunspell.Add(line);
}
回答1件
あなたの回答
tips
プレビュー