ОК, поэтому вы хотите прочитать подматрицу размера n x m , начиная с позиций x , y в большой матрице размера p x q . Вам нужно две вещи:
Ваша текущая реализация начинает чтение с самого первого элемента матрицы, а затем читает элементы смежно в подматрицу. Обновленная версия:
FILE *sample = fopen("randomfile.txt", "r");
// skip the first y-1 rows
for (i = 0; i < y - 1; i++) {
fscanf(sample, "%*[^\n]\n", &matrix[i][j]);
}
for (i = 0; i < m; i++) {
// skip the first x-1 numbers
for (j = 0; j < x - 1; j++) {
fscanf(sample, "%*f");
}
// read n numbers
for (j = 0; j < n; j++) {
fscanf(sample, "%f", &matrix[i][j]);
}
if (x + n < p) {
// consume the rest of the line
fscanf(sample, "%*[^\n]\n");
}
}
fclose(sample);
Обновление: для чтения подматрицы из массива вместо этого еще проще, просто требуется немного больше вычислений. Суть заключается в том, что матрица размера p x q может быть сохранена в смежной матрице размера p x q , так что матрица [i, j] может быть прочитана из массива [i * (j-1) + j] (приблизительно - могут быть ошибки «по очереди», и я никогда не уверен, который является столбцом, и который является строка, но, надеюсь, вы получите идею: -)
Таким образом, код будет похож на
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
submatrix[i][j] = array[(y + i) * p + x + j];
}
}
Имена таблиц и столбцов должны быть статичными, если запрос статичен. Для динамических имен таблиц или столбцов следует генерировать полный SQL динамически и использовать sp_executesql для его выполнения.
Более подробная информация здесь: Проклятие и благословение динамического SQL
Вы не можете использовать имя таблицы для переменной, вам придется сделать это вместо этого:
DECLARE @sqlCommand varchar(1000)
SET @sqlCommand = 'SELECT * from yourtable'
EXEC (@sqlCommand)
Вам необходимо динамически сгенерировать sql:
declare @tablename varchar(50)
set @tablename = 'test'
declare @sql varchar(500)
set @sql = 'select * from ' + @tablename
exec (@sql)