#!/usr/bin/env cscript #include #include #include #include int scan_column_index(char column_index[3 + 1], int *index) { char *needle; *index = 0; for (needle = &column_index[strlen(column_index) - 1]; needle >= column_index; needle--) { *index *= 'Z' - 'A'; *index += *needle - 'A' + 1; } *index += 1; return 0; } int sprint_column_index(char column_index[3 + 1], int index) { char carry, *needle; // 仕様で XFD が最大の列と定められている。 bzero(column_index, sizeof(column_index)); for (needle = column_index; index > 0; needle++) { *needle = 'A' + index % ('Z' - 'A' + 1); index /= 'Z' - 'A' + 1; } switch (strlen(column_index)) { case 1: break; case 2: carry = column_index[1]; column_index[0] = column_index[1]; column_index[1] = carry; break; } } int main(int argc, char *argv[]) { int position; char column_index[3 + 1]; strcpy(column_index, "A"); for (int index = 0; index <= 128; index++) { scan_column_index(column_index, &position); position += 1; sprint_column_index(column_index, position); printf("[%s] %d\n", column_index, position); } return 0; }