-1

こんにちは、SSIS の非常に単純なスクリプト タスクで問題が発生しています。初めてLINQを使った

string iFileName = (string)(Dts.Variables["iFileName"].Value);
string oFileName = (string)(Dts.Variables["oFileName"].Value);

try
{
   // string[] lines = File.ReadAllLines(@"\\Fcwdsqlanl01\e$\SQL_OLAP\Log\Billing_2.log");

    IEnumerable<string> stringsOut = File.ReadAllLines(iFileName)
          .Where(line => (char.IsDigit(line, 0)) && line.Contains(","))
          .Select(line => line);

    File.WriteAllLines(oFileName, stringsOut);
}
catch (Exception e)
{
    MessageBox.Show(e.Message);
}

これは私が得ているエラーです

「System.IO.File.WriteAllLines(string, string[])」のオーバーロードされた最適な一致には、いくつかの無効な引数があります。

ReadAllLines と同じように使用したため、引数に問題がある理由がわかりません。私はすでにチェックしており、stringsOut 変数は必要な文字列の配列を保持しています。WriteAllLines を使用せずにこれを行う方法があることは認識していますが、単純なものが不足していると仮定してそれを行いたいと考えています。

4

5 に答える 5

3

WriteAllLinesstring[]は、 2 番目の引数としてa を想定していますが、 IEnumerable<string>. それIEnumerable<string>は を参照できますが、string[]も実装している他のタイプを参照することもできますIEnumerable<string>

これはうまくいくはずです:

File.WriteAllLines(oFileName, stringsOut.ToArray());
于 2013-03-11T16:07:19.943 に答える
2

どのバージョンの .Net をコンパイルしていますか? 2 番目のパラメーターとしてWriteAllLinesan を受け入れるオーバーロードは、IEnumerable<string>.Net 4.0 まで追加されませんでした。string[]このメソッドは 3.0 に存在しますが、2 番目のパラメーターとして a を取るオーバーロードしかありません。

于 2013-03-11T16:08:21.240 に答える
1

「System.IO.File.WriteAllLines(string, string[])」のオーバーロードされた最適な一致

WriteAllLines私はあなたが.NET 4以下で、.NET 4で IEnumerable<string>新しくなったと仮定しています。

したがって、配列バージョンを使用してください。

string[] stringsOut = File.ReadAllLines(iFileName)
    .Where(line => (char.IsDigit(line, 0)) && line.Contains(","))
    .Select(line => line)
    .ToArray();
File.WriteAllLines(oFileName, stringsOut);
于 2013-03-11T16:09:39.147 に答える
1

を実行していますがReadAllLines、これを に変換する LINQ フィルターを適用していIEnumerable<string>ます。

コードを次のように変更してみてください

IEnumerable<string> stringsOut = File.ReadAllLines(iFileName)
                  .Where(line => (char.IsDigit(line, 0)) && line.Contains(","))
                  .Select(line => line)
                  .ToArray();
于 2013-03-11T16:08:53.733 に答える
1

このメソッドFile.WriteAllLinesは、文字列ではなく、文字列配列を 2 番目のパラメーターとして受け取ります。

于 2013-03-11T16:09:53.493 に答える