Aldo Chaman

All generations.

generate functionMon, 24 Jul 2023

corrige este codigo uso de la variable local no asignada value public System.Data.DataTable ExecuteSelect(string sqlQuery) { var dataTable = new System.Data.DataTable(); Application excelApp = null; Workbook workbook = null; Worksheet worksheet = null; try { excelApp = new Application(); var workbooks = excelApp.Workbooks; workbook = workbooks.Open(filePath); worksheet = (Worksheet)workbook.Worksheets[1]; // Convertir toda la consulta SQL a letras minúsculas. sqlQuery = sqlQuery.ToLower(); // Separar la sentencia SQL en tokens para identificar la operación. var sqlTokens = sqlQuery.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var operation = sqlTokens[0]; // Validar que la operación sea SELECT. if (operation != "select") { throw new InvalidOperationException("Solo se admiten consultas SELECT para ExecuteSelect."); } // Obtener los nombres de las columnas desde la primera fila en el archivo Excel. var usedRange = worksheet.UsedRange; var columnNames = new List<string>(); foreach (Range cell in usedRange.Rows[1].Cells) { columnNames.Add(cell.Value.ToString()); } // Encontrar el índice del keyword "FROM". var fromIndex = Array.IndexOf(sqlTokens, "from"); // Obtener los nombres de las columnas solicitadas en la consulta SELECT. var selectedColumnNames = sqlTokens .SkipWhile(t => t != "select") // Buscar "SELECT" y saltar los tokens anteriores. .Skip(1) // Saltar "SELECT" y pasar a los nombres de columna o funciones de agregación. .Take(fromIndex - 1) // Tomar todos los tokens hasta llegar a "FROM". .Select(t => t.Trim(' ', '[', ']', '`', '\'')) .ToList(); // Verificar si la consulta solicita todas las columnas con '*'. if (selectedColumnNames.Contains("*")) { selectedColumnNames = columnNames; } // Convertir los nombres de las columnas en el archivo Excel a minúsculas para hacerlos insensibles a mayúsculas/minúsculas. var lowerCaseColumnNames = columnNames.Select(name => name.ToLower()).ToList(); // Validar que todas las columnas especificadas en la consulta existan en el archivo Excel. foreach (var selectedColumn in selectedColumnNames) { var columnName = selectedColumn.Trim(' ', '[', ']', '`', '\''); if (!lowerCaseColumnNames.Contains(columnName.ToLower())) { throw new InvalidOperationException($"La columna '{columnName}' no se encuentra en el archivo Excel."); } } // Si la consulta tiene funciones de agregación, procesarlas y calcular los resultados. var hasAggregation = selectedColumnNames.Any(c => c.StartsWith("count(") || c.StartsWith("avg(") || c.StartsWith("max(") || c.StartsWith("min(") || c.StartsWith("sum(") || c.StartsWith("ucase(")); if (hasAggregation) { // Obtener todas las filas para evaluar las funciones de agregación. var dataRange = usedRange.Rows.get_Range("A2", usedRange.Cells[usedRange.Rows.Count, usedRange.Columns.Count]); var rowCount = usedRange.Rows.Count - 1; // Restar 1 para excluir la fila de encabezados. var rowValues = dataRange.Value; foreach (var selectedColumn in selectedColumnNames) { var columnName = selectedColumn.Trim(' ', '[', ']', '`', '\''); if (selectedColumn.StartsWith("count(")) { columnName = selectedColumn.Replace("count(", "").Trim(' ', '[', ']', '`', '\''); var columnIndex = lowerCaseColumnNames.IndexOf(columnName.ToLower()); if (columnIndex >= 0) { int count = 0; for (int i = 1; i <= rowCount; i++) { var cellValue = rowValues[i, columnIndex + 1]; if (cellValue != null) { count++; } } dataTable.Columns.Add(selectedColumn, typeof(int)).Expression = count.ToString(); } } else if (selectedColumn.StartsWith("avg(")) { columnName = selectedColumn.Replace("avg(", "").Trim(' ', '[', ']', '`', '\''); var columnIndex = lowerCaseColumnNames.IndexOf(columnName.ToLower()); if (columnIndex >= 0) { double sum = 0; int count = 0; for (int i = 1; i <= rowCount; i++) { var cellValue = rowValues[i, columnIndex + 1]; if (cellValue != null && double.TryParse(cellValue.ToString(), out double value)) { sum += value; count++; } } if (count > 0) { double average = sum / count; dataTable.Columns.Add(selectedColumn, typeof(double)).Expression = average.ToString(); } } } else if (selectedColumn.StartsWith("max(")) { columnName = selectedColumn.Replace("max(", "").Trim(' ', '[', ']', '`', '\''); var columnIndex = lowerCaseColumnNames.IndexOf(columnName.ToLower()); if (columnIndex >= 0) { double max = double.MinValue; for (int i = 1; i <= rowCount; i++) { var cellValue = rowValues[i, columnIndex + 1]; if (cellValue != null && double.TryParse(cellValue.ToString(), out double value)) { if (value > max) { max = value; } } } dataTable.Columns.Add(selectedColumn, typeof(double)).Expression = max.ToString(); } } else if (selectedColumn.StartsWith("min(")) { columnName = selectedColumn.Replace("min(", "").Trim(' ', '[', ']', '`', '\''); var columnIndex = lowerCaseColumnNames.IndexOf(columnName.ToLower()); if (columnIndex >= 0) { double min = double.MaxValue; for (int i = 1; i <= rowCount; i++) { var cellValue = rowValues[i, columnIndex + 1]; if (cellValue != null && double.TryParse(cellValue.ToString(), out double value)) { if (value < min) { min = value; } } } dataTable.Columns.Add(selectedColumn, typeof(double)).Expression = min.ToString(); } } else if (selectedColumn.StartsWith("sum(")) { columnName = selectedColumn.Replace("sum(", "").Trim(' ', '[', ']', '`', '\''); var columnIndex = lowerCaseColumnNames.IndexOf(columnName.ToLower()); if (columnIndex >= 0) { double sum = 0; for (int i = 1; i <= rowCount; i++) { var cellValue = rowValues[i, columnIndex + 1]; if (cellValue != null && double.TryParse(cellValue.ToString(), out double value)) { sum += value; } } dataTable.Columns.Add(selectedColumn, typeof(double)).Expression = sum.ToString(); } } else if (selectedColumn.StartsWith("ucase(")) { columnName = selectedColumn.Replace("ucase(", "").Trim(' ', '[', ']', '`', '\''); var columnIndex = lowerCaseColumnNames.IndexOf(columnName.ToLower()); if (columnIndex >= 0) { for (int i = 1; i <= rowCount; i++) { var cellValue = rowValues[i, columnIndex + 1]; if (cellValue != null) { rowValues[i, columnIndex + 1] = cellValue.ToString().ToUpper(); } } } dataTable.Columns.Add(columnName); } else { var columnIndex = lowerCaseColumnNames.IndexOf(columnName.ToLower()); if (columnIndex >= 0) { dataTable.Columns.Add(columnName); } } } } else { // Copiar las columnas seleccionadas al DataTable. foreach (var selectedColumn in selectedColumnNames) { var columnName = selectedColumn.Trim(' ', '[', ']', '`', '\''); var columnIndex = lowerCaseColumnNames.IndexOf(columnName.ToLower()); if (columnIndex >= 0) { dataTable.Columns.Add(columnName); } } // Obtener las filas de datos a partir de la segunda fila en adelante. for (int row = 2; row <= usedRange.Rows.Count; row++) { var dataRow = (Range)usedRange.Cells[row, 1].Resize[1, lowerCaseColumnNames.Count]; var rowValues = dataRow.Value; if (rowValues != null) { var rowArray = new object[selectedColumnNames.Count]; for (int i = 0; i < selectedColumnNames.Count; i++) { // Obtener el nombre de la columna actual en minúsculas para hacerlo insensible a mayúsculas/minúsculas. var columnName = selectedColumnNames[i]?.ToLower(); // Buscar el índice de la columna en lowerCaseColumnNames (archivo Excel) ignorando mayúsculas/minúsculas. var columnIndex = lowerCaseColumnNames.IndexOf(columnName); if (columnIndex >= 0) { rowArray[i] = rowValues[1, columnIndex + 1]; } } dataTable.Rows.Add(rowArray); } } } // Cerrar el libro de Excel. workbook.Close(false); excelApp.Quit(); return dataTable; } catch (Exception ex) { // Manejar cualquier excepción aquí... throw; } finally { // Liberar los objetos COM y cerrar la aplicación de Excel. if (worksheet != null) Marshal.ReleaseComObject(worksheet); if (workbook != null) Marshal.ReleaseComObject(workbook); if (excelApp != null) { excelApp.Quit(); Marshal.ReleaseComObject(excelApp); } // Para asegurarse de que se liberen los recursos de forma adecuada. GC.Collect(); GC.WaitForPendingFinalizers(); } }

//function that: def ExecuteSelect(sqlQuery): dataTable = pd.DataFrame() excelApp = None workbook = None worksheet = None try: excelApp = win32com.client.Dispatch("Excel.Application") workbooks = excelApp.Workbooks workbook = workbooks.Open(filePath) worksheet = workbook.Worksheets(1) # Convertir toda la consulta SQL a letras minúsculas. sqlQuery = sqlQuery.lower() # Separar la sentencia SQL en tokens para identificar la operación. sqlTokens = sqlQuery.split(' ') operation = sqlTokens[0] # Validar que la operación sea SELECT. if operation != "select": raise ValueError("Solo se admiten consultas SELECT para ExecuteSelect.") # Obtener los nombres de las columnas desde la primera fila en el archivo Excel. usedRange = works

class from descriptionWed, 12 Jul 2023

clase que envie archivos sftp

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using Renci.SshNet; using Renci.SshNet.Common; using Renci.SshNet.Sftp; namespace SshNet { class Program { static void Main(string[] args) { // Connexion au serveur SFTP Console.WriteLine("Connexion au serveur SFTP"); SftpClient clt = new SftpClient("localhost", "root", "root"); clt.Connect(); // Création du répertoire sftpTest sur le serveur Console.WriteLine("Création du répertoire sftpTest sur le serveur"); clt.CreateDirectory("/tmp/sftpTest"); // Upload du fichier sur le serveur SFTP Console.WriteLine("Upload du fichier sur le serve

Questions about programming?Chat with your personal AI assistant