0

作業中の HRIS パッケージでスクリプト コンポーネントを動作させようとしています。非呼び出しエラーが発生します。私は C# に詳しくないので、これを修正する方法がわかりません。私は、別の STO メンバーから以前に与えられたコードを変更したフライドを扱っています。

長さ(); 「for」ステートメントの最後にある「i」と同様に、競合を引き起こしているものです。

変更後のコードは以下です。

/* Microsoft SQL Server Integration Services Script Component
*  Write scripts using Microsoft Visual C# 2008.
*  ScriptMain is the entry point class of the script.*/

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Text.RegularExpressions;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{

public override void PreExecute()
{
    base.PreExecute();
    /*
      Add your code here for preprocessing or remove if not needed
    */
}

public override void PostExecute()
{
    base.PostExecute();
    /*
      Add your code here for postprocessing or remove if not needed
      You can set read/write variables here, for example:
      Variables.MyIntVar = 100
    */
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    const string pFirstName = @"^[A-Z]([-']?[a-z]+)*";
    const string pSuffix = @"((Jr|Sr|I|V|X)( ?))+";
    const string pInitial = @"(?<=\s)[A-Z](?=\s)";
    const string pLastName = @"(?!(?:Jr|Sr|I|V|X|^))([A-Z][-'\s]?[a-z]+)";

    string fullName = Row.Name.ToString();
    string firstName = Regex.Match(fullName, pFirstName).Value;
    string suffix = Regex.Match(fullName, pSuffix).Value;
    string initial = Regex.Match(fullName, pInitial).Value;
    string lastName = Regex.Match(fullName, pLastName).Value;

    /*
     * 20130708 - Edited by Armando Allison
     * 
     * 
     * 1. Get the length of the entire full name
     * 2. Get the firstName length value
     * 3. Get the initial length value
     * 4. Get the suffix length value
     * 5. Get the lastName length value
     * 
     * 
     */


    int length_full = fullName.Length();     //length of fullName
    int length_first = firstName.Length();    //length of the firstName
    int length_suffix = suffix.Length();   //length of the suffix
    int length_initial = initial.Length();  // length of the initial
    int length_lastName = lastName.Length(); //length of the lastName

    int compare_length = 0;
    compare_length = length_full - (length_first - length_initial - length_suffix); //      if it pulled the data correctly, lastName length should equal compare_length


    if (length_lastName == compare_length)
    {
        if (!string.IsNullOrEmpty(initial))
            lastName += " " + initial;

        if (!string.IsNullOrEmpty(suffix))
            lastName += " " + suffix;

        Row.FirstName = firstName;
        Row.LastName = lastName;

    }
    else
    {
        // if the lastName doesnt match the compare_length
        // you will have to do some more editing.

        // 1. put entire full name into a string array
        // 2. remove all the suffix, initial, and firstName
        // 3. then output the entire lastName in a for loop with the remaining full name array 
        //    remove to remove the other parts of the array that is not needed
        // Pseudo code

        char[] entire_name;
        entire_name = new char[length_full];
        entire_name = fullName.ToCharArray(0, length_full);
        for (i = compare_length; i < length_full - 1; i++)
        {
            lastName = (String)entire_name[i];
        }
        // loop entire array to include the entire full name
        // next remove the parts of the array that is not needed
        // then output just the last name with another for loop




    }



}

}  
4

7 に答える 7

5

長さ文字列型のプロパティであるため、括弧を削除します。呼び出すだけです:

suffix.Length;

また

for(int i = compare_length; i < length_full - 1; i++)
{
     //Do something
}

ループ内で i を int として定義する必要があるためです。

プラス、

lastName = (String)entire_name[i];間違っている

使用する :

lastName = entire_name[i].ToString();
于 2013-07-09T16:13:33.873 に答える
0

以下に示す長さのみを使用し、Length() の not メソッドを使用しないでください。

fullName.Length;
于 2013-07-09T16:14:46.170 に答える
0

forループの問題の最後の「i」は、ループ宣言を次のように置き換えることで修正できるはずです

for(int i = compare_length; i < length_full - 1; i++)
于 2013-07-09T16:14:21.640 に答える