ich eine Textdatei mit SQL-Befehlen haben, ich habe einige Code getan „ignorieren“, um die Kommentare und Leerzeichen in orde nur die Befehle zu bekommen (ich werde schreiben Code unten und ein Beispiel für die Textdatei und Ausgabe), das funktioniert gut, aber in dieser Textdatei habe ich auch Zeilen wie diese "--------------------- -------------- "das muss ich ignorieren, ich habe den Code gemacht, um es zu ignorieren, aber ich kann nicht herausfinden, warum es nicht richtig funktioniert. Code:Auslassen von Linien mit Bindestrichen in einer Textdatei mit Regex in C#
public string[] Parser(string caminho)
{
string text = File.ReadAllText(caminho);
var Linha = Regex.Replace(text, @"\/\**?\*\/", " ");
var Commands = Linha.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries)
.Where(line => !string.IsNullOrWhiteSpace(line))
.Where(line => !Regex.IsMatch(line, @"^[\s\-]+$"))
.ToArray();
}
Dies ist die .Where Ich habe die gestrichelten Linien zu "ignorieren":
.Where (line => Regex.IsMatch (Linie, @ "^ [\ s -] + $ "))
Probe von Text mit den Strichen:
/
---------------------------------------------------------------------
UPDATE CDPREPORTSQL
SET COMANDOSQL_FROM =
'SELECT DESCONTO,EMPCOD,EMPDSC,LINVER,NOMESISTEMA,OBS,ORCCOD,ORCVER,PEDCOD,PEDDSC,
ROUND(PRCUNIT*#CAMBIO#,5) PRCUNIT,
ROUND(PRCUNITSEMDESC*#CAMBIO#,5) PRCUNITSEMDESC,
PROPCHECK,QTDGLOB,QTDPROP,REFCOD,REFDSC,EMPCODVER, COEFGERAL_PLT FROM #OWNER#.VW_PROPOSTAS',
COMANDOSQL_WHERE =
'WHERE ORCCOD=#ORCCOD# AND ORCVER=#ORCVER# AND NOMESISTEMA=#NOMESISTEMA# AND PEDCOD=#MYCOD#'
WHERE REPID = 'CDP0000057'
/
---------------------------------------------------------------------
Probe des Ausgangs:
---------------------------------------------------------------------
UPDATE CDPREPORTSQL
SET COMANDOSQL_FROM =
'SELECT DESCONTO,EMPCOD,EMPDSC,LINVER,NOMESISTEMA,OBS,ORCCOD,ORCVER,PEDCOD,PEDDSC,
ROUND(PRCUNIT*#CAMBIO#,5) PRCUNIT,
ROUND(PRCUNITSEMDESC*#CAMBIO#,5) PRCUNITSEMDESC,
PROPCHECK,QTDGLOB,QTDPROP,REFCOD,REFDSC,EMPCODVER, COEFGERAL_PLT FROM #OWNER#.VW_PROPOSTAS',
COMANDOSQL_WHERE =
'WHERE ORCCOD=#ORCCOD# AND ORCVER=#ORCVER# AND NOMESISTEMA=#NOMESISTEMA# AND PEDCOD=#MYCOD#'
WHERE REPID = 'CDP0000057'
---------------------------------------------------------------------
Dies sind die Beispiele für Aussagen, die auftreten können, und dass ich zu verarbeiten:
/* */
UPDATE Orc
/*UPDATE comando */
set MercadoInt = 'N', Coef_KrMo = 1, Coef_KrMt = 1, Coef_KrEq = 1, Coef_KrSb = 1, Coef_KrGb = 1, Coef_MDEmp = 1, Coef_MDLoc = 1, Abrv_MDLoc = '', Dsc_MDLoc = '', Arred_MDLoc = 'N', Arred_NDecs = 0 WHERE MercadoInt IS NULL
/
Ein anderes:
/* */
---- comment
UPDATE Orc set MercadoInt = 'N', Coef_KrMo =
-1, Coef_KrMt = 1, Coef_KrEq = 1, Coef_KrSb = 1, Coef_KrGb = 1, Coef_MDEmp = 1, Coef_MDLoc = 1, Abrv_MDLoc = '', Dsc_MDLoc = '', Arred_MDLoc = 'N', Arred_NDecs = 0 WHERE MercadoInt IS NULL
/
Und noch eins:
/* */
UPDATE Orc set MercadoInt = 'N', Coef_KrMo = 1, Coef_KrMt = 1, Coef_KrEq = 1, Coef_KrSb = 1, Coef_KrGb = 1, Coef_MDEmp = 1, Coef_MDLoc = 1, Abrv_MDLoc = '', Dsc_MDLoc = '', Arred_MDLoc = 'N', Arred_NDecs = 0 WHERE MercadoInt IS NULL
/
Bitte beachte, dass ich brauche sie auch zu verarbeiten, wenn es Abschnitt in der Mitte, wenn die Aussage Beachten Sie, dass alles andere funktioniert (es „ignoriert“ die Kommentare und Leerzeichen)
kommentiert werden die ‚/‘ ist nur zu teilen, die Befehle in der Textdatei
Dies kann leicht komplexer werden, als ein Regex im Allgemeinen bewältigen kann, wenn Sie auf die gleiche Weise wie SQL kommmentieren müssen. Z.B. Eine Zeile, die Bindestriche enthält, kann ein perfekt gültiges Eingabeelement sein, wenn sie als Teil eines mehrzeiligen Zeichenfolgenliterals auftritt. –
Also sagen Sie, dass diese Methode in einigen Fällen unwirksam sein kann? Was sollte der beste Ansatz sein, ohne Software oder Add-Ons von Drittanbietern zu verwenden? Plus, für das, was ich weiß, die Befehle werden nicht viel davon abweichen –
@Damien_The_Unbeliever, wenn Sie brauchen, kann ich einen Link auf die Volltext-Datei für Sie einen Blick auf es –