-2

次のようなテキストを含むバッチ ファイル (.bat) が 1 つあります。

osql -S %ServerName% -d %DBName% -U %sql_login% -P %sql_passwd% -n -i sp_RejectAccounts_qsel.sql -o sp_RejectAccounts_qsel.out
osql -S %ServerName% -d %DBName% -U %sql_login% -P %sql_passwd% -n -i sp_RejectAccounts_sel.sql -o sp_RejectAccounts_sel.out
osql -S %ServerName% -d %DBName% -U %sql_login% -P %sql_passwd% -n -i sp_GetCompanyRecordCardRequest_01Aug2012.sql -o sp_GetCompanyRecordCardRequest_01Aug2012.out
osql -S %ServerName% -d %DBName% -U %sql_login% -P %sql_passwd% -n -i SPGetCreditTransactions.sql -o SPGetCreditTransactions.out

文字列の配列など、すべての .sql ファイルを取得する方法が必要です。
テキストに一部変更がありました。正規表現は .sql を見つけ、スペースが見つかるまで左に移動する必要があります。

4

4 に答える 4

1
        List<string> sqls = File.ReadAllLines("Utils.txt")
                                .Select(s =>
                                {
                                    string temp = s.Substring(s.IndexOf("<"));
                                    return temp = temp.Substring(1, temp.IndexOf(">") - 1).Trim();
                                })
                                .ToList();

そのため、任意のアルゴリズムを指定して、 内のファイル名を抽出できますSelect。ファイル名がファイルにどのように表示されるかについてさらに情報を指定した場合、より特別なコードを指定できる可能性があります

編集

を使用した別の例を次に示しRegexます。

        string regex = @"(?<sql>[\w]{1,}.sql)";
        List<string> sqls = File.ReadAllLines("Utils.txt")
                                .Select(s =>
                                {
                                    Match m = Regex.Match(s, regex);
                                    if (m.Success)
                                        return m.Groups["sql"].Value;
                                    else
                                        return string.Empty;
                                })
                                .ToList();

編集

List<string> sqls = File.ReadAllLines("Utils.txt").Select(s => s.Split(' ').FirstOrDefault(f => f.Contains(".sql"))).ToList();

編集

AAAそして、先ほど提供した正規表現を次のように変更できます

string regex = @"(?<sql>[\S]{1,}.sql)";

と同じ結果を得るSplit

于 2012-08-24T05:38:53.613 に答える
1

次のように実行できます。

        string input = @"osql -S %ServerName% -d %DBName% -U %sql_login% -P %sql_passwd% -n -i sp_RejectAccounts_qsel.sql -o sp_RejectAccounts_qsel.out
                        osql -S %ServerName% -d %DBName% -U %sql_login% -P %sql_passwd% -n -i sp_RejectAccounts_sel.sql -o sp_RejectAccounts_sel.out
                        osql -S %ServerName% -d %DBName% -U %sql_login% -P %sql_passwd% -n -i sp_GetCompanyRecordCardRequest_01Aug2012.sql -o sp_GetCompanyRecordCardRequest_01Aug2012.out
                        osql -S %ServerName% -d %DBName% -U %sql_login% -P %sql_passwd% -n -i SPGetCreditTransactions.sql -o SPGetCreditTransactions.out";

        List<string> names = Regex.Matches(input, @"[^\s]+\.sql")
                .Cast<Match>()
                .Select(o => o.Groups[0].Value)
                .ToList();
于 2012-08-24T07:16:36.790 に答える
0

以下は、これを行うコードです。

        var input =
            @" > %ORACLE_CreateScriptsPath%\VersionInsertScript_Or.out 

sqlplus %1/%2 < %ORACLE_CreateScriptsPath%\Create_GT_GenerateInvoiceTxnsReportData.sql > %ORACLE_CreateScriptsPath%\Create_GT_GenerateInvoiceTxnsReportData.out sqlplus %1/%2 < %ORACLE_CreateScriptsPath%\Create_GT_GenerateInvoiceTxnReportDataRD.sql > %ORACLE_CreateScriptsPath%\Create_GT_GenerateInvoiceTxnReportData%2%SQLplus1/%2 < %ORACLE_CreateScriptsPath%\Create_GT_GenerateTXNInvestigationReport.sql > %ORACLE_CreateScriptsPath%\Create_GT_GenerateTXNInvestigationReport.out sqlplus %1/%2 < %ORACLE_CreateScriptsPath%\GenerateInvoiceTxnsReportData.sql > %ORACLE_CreateScriptsPath%\GenerateInvoiceTxnsReportData.out sqlplus %1/%2 < %ORACLE_CreateScriptsDataReportDataDataPath%nGenerate .sql > %ORACLE_CreateScriptsPath%\GenerateInvoiceTxnReportDataRD.out";

        var matches = Regex.Matches(input, @"ORACLE_CreateScriptsPath%\\(.*) >");

        // here is your string array.
        var results = matches.Cast<Match>().Select(m => m.Groups[1]);

        // echo results.
        Console.Out.WriteLine(string.Join("\r\n", results));
于 2012-08-24T06:42:44.490 に答える
0

このようにすることができます。(入力のコンテナーとして List を使用しています)。それが機能するかどうかはわかりません。おそらく、インデックス + と - を少し調整する必要があります。空白に応じて。

var a = new List<string>{"sqlplus %1/%2 < %ORACLE_CreateScriptsPath%\VersionInsertScript_Or.sql > %ORACLE_CreateScriptsPath%\VersionInsertScript_Or.out",
"sqlplus %1/%2 <  %ORACLE_CreateScriptsPath%\Create_GT_GenerateInvoiceTxnsReportData.sql > %ORACLE_CreateScriptsPath%\Create_GT_GenerateInvoiceTxnsReportData.out",
"sqlplus %1/%2 <  %ORACLE_CreateScriptsPath%\Create_GT_GenerateInvoiceTxnReportDataRD.sql > %ORACLE_CreateScriptsPath%\Create_GT_GenerateInvoiceTxnReportDataRD.out",
"sqlplus %1/%2 <  %ORACLE_CreateScriptsPath%\Create_GT_GenerateTXNInvestigationReport.sql > %ORACLE_CreateScriptsPath%\Create_GT_GenerateTXNInvestigationReport.out",
"sqlplus %1/%2 <  %ORACLE_CreateScriptsPath%\GenerateInvoiceTxnsReportData.sql > %ORACLE_CreateScriptsPath%\GenerateInvoiceTxnsReportData.out",
"sqlplus %1/%2 <  %ORACLE_CreateScriptsPath%\GenerateInvoiceTxnReportDataRD.sql > %ORACLE_CreateScriptsPath%\GenerateInvoiceTxnReportDataRD.out"};

var strings = new List<string>();

foreach(var input in a)
{
var tmpString = input.Substring(input.IndexOf("<")+3);
tmpString = tmpString.Remove(tmpString.IndexOf(">")-1);
strings.Add(tmpString);
}
//Here you have all the SQL files accessible in the strings collection

ファイル名を取得するために分割を使用する可能性もあります。このようなもの。

var fileNames= input.Split(" ").Where(f => f.Contains(".sql")).ToList();
于 2012-08-24T05:38:55.787 に答える