Java가 매우 녹슬어서 Linus인지 Win32인지에 따라 쉘 스크립트 나 배치 파일의 실행을 단순화하는 사용자 인터페이스를 만들려고 노력하고 있습니다. 파일의 이름 지정 규칙은 다음과 같습니다. &은 FoxPro 프로그램의 명령 창 또는 시스코의 같은 단순화 된 용어 soemthing로 단축 - (""예,로 구분) 명령 토큰 화Java Shell 와일드 카드 토크 나이 자
- :
module-verb-object-etc [args-list] mysql-connect-grid mysql-connect-rds mysql-dump-grid mysql-dump-grid-se314
궁극적으로 나는 내가 할 수 있도록 명확한 용어를 구문 분석하는 데 싶습니다 IOS (예 : "my co gr"은 유닉스에서는 "mysql-connect-grid"를, win32에서는 * .cmd를 실행합니다)
- 또한 IOS 스타일로 사용자가 질문을 입력 할 수 있도록 축약 된 명령을 입력 할 수 있습니다 기호 (?)를 입력하면 고유 한 나머지 (또는 다음) 명령 옵션에 대한 힌트가 제공됩니다 (예 : "my ? "를 반환하면 mysql &"my? "가 connect 또는 dump를 반환합니다. Othr 반환 값은 고유하지 않거나 일치 할 수없는 명령에 대해 "모호"또는 "알 수 없음"입니다.
내가의 배열을 retun & 디렉토리에서 파일 목록을 뽑아 함수를 쓴 ... 그것은 사소한 것처럼 보일 수 있지만 각 폴더의 명령 수백이있다 내 사용자는 생각하고 싶지 않아 fileanmes. 그런 다음 잠재적 인 명령의 동적 크기가 조정 된 격자를 반환하는 아래의 방법을 사용하여 2 차원 배열로 변환합니다.
/**********************************************************************************
* MAKE GRID: Parses array of filenames and tokenizes AWS cmds.
* @param strs Array of filenames
**********************************************************************************/
public static String [][] makeGrid(String strs[], boolean bPrint) {
String tmpGrid[][];
int nMaxCols = 0;
int nRows = uniqueCount(strs);
int nGridRow = 0;
tmpGrid = new String [nRows][];
for (int nRow=0; nRow<nRows; nRow++) {
String cFilename = strs[nRow];
if (!cFilename.endsWith(".cmd") // just list unix files (filter for batch files)
&& cFilename.indexOf("-") > 0) // make sure there's a dash in the filename
{
String strTokens[] = tokenize(strs[nRow], "-"); // the dash is our token deliminator
int nCols = strTokens.length;
if (nCols>nMaxCols) nMaxCols=nCols;
tmpGrid[nGridRow] = new String [nCols];
for (int nCol=0; nCol<nCols; nCol++) {
tmpGrid[nGridRow][nCol] = strTokens[nCol];
if (bPrint) System.out.print(" "+tmpGrid[nGridRow][nCol]);
}
nGridRow++;
if (bPrint) System.out.println("");
} //end-if
}
String[][] cmdGrid = new String[nGridRow][nMaxCols];
System.arraycopy(tmpGrid, 0, cmdGrid, 0, nGridRow); // removes null rows (&NPEs!)
return cmdGrid;
}
이것은 (아래) 2 차원 어레이 반환하므로 grid[Row-N][Col-0]
은 일치한다. row[0]
는 cmdToken[0] && row[1]
에 대한 와일드 카드 일치 내 사용자가 "my du gr ?"
반환 "ENTER, [se314]"
때까지 함께 명령을 잇 수 있도록 cmdToken[1]
"와 같은"입니다 어디 별개의 값을 끌어하고 싶습니다 - 그 말이 있다면 ...
String[][] makeGrid:
mysql dump grid se314
mysql connect grid
mysql dump grid
mysql connect rds
내 도전 과제 : java에서 matcher 함수를 사용하여 머리를 맞대는 것 같다.
"SELECT DISTINCT col2 FROM cmd_Grid
WHERE col1 LIKE 'cmdToken1%' "
또는 더 나은 :이 SQL 인 경우는 같은 될 것입니다 당신이 정확하게 일치 할 때까지 반복적으로 각 연속 열
`SELECT DISTINCT col+str(depthmark+1) FROM cmd_Grid
WHERE col+str(depthmark) LIKE 'cmdMatchedTokens%' "
에 대한 INT의 depthmark 설정.
필자는 필사적으로 노력한 joSQL라는 패키지를 발견했지만 Java6에서 작동시키지 못하는 것 같습니다. 어쨌든 : 모든 클래스가 하나의 클래스에 포함될 수 있도록 순수한 자바 솔루션을 기대하고있었습니다.
아마도 다차원 배열을 고유 한 값으로 구문 분석 할 스캐너 나 무언가를 사용했을 것입니다. 그것이 필요로하는 것보다 훨씬 더 복잡하게 만듭니다.
올바른 방향으로 부드럽게 움직여 주시면 감사하겠습니다.
TIA
나는 왜 그것이 메소드에 대한 코드를 죽였는 지 모르겠다. 그러나 나는 그것이 중요하지 않다고 생각한다. 나도 꽤 다음 부분 중 하나를 작동하지만 java.lang.ProcessBuilder 함수에 전달하여 다른 독립형 Java 프로그램이나 스크립트 또는 배치 파일을 실행합니다. OS에 따라 매우 흥미 롭습니다. – WWWIZARDS