preciso validar uma planilha… preciso sabe como faço para validar apenas as linhas que possuem APENAS um underline ("_").
eu fiz assim mas esta bem errado
List<String> filesList = null;
for (int i = 0; i < FILE_NAMES.length; i++) {
curr = FILE_NAMES[i];
if (curr != null && curr.contains("_")) {
if (curr.contains("_R")) {
curr = curr.substring(0, curr.indexOf("_R"));
Não entendi muito bem.
Pergunta, você precisa validar o nome do planilha ou o conteúdo da planilha?
Pode explicar melhor como deve ser a validação do underline?
?.. E fazendo a validação quando identificar que tem mais de um underline.
D
dante2202
Ja tentei de todas as formas mas nada..
preciso que ele leia todas as linhas da planilha.. e verifique em cada uma delas se o conteudo tenha mais que um underline
publicclassCheckInfo{privatestaticfinalLoggerlog=Logger.getLogger(CheckInfo.class.getSimpleName());privatestaticString[]FILE_NAMES=null;/** * @param args * @throws IOException * @throws BiffException */publicstaticvoidmain(String[]args)throwsIOException{try{if(args!=null){System.out.println("args[1]: "+args[1]);StringfileName=args[0];WorkbookSettingsws=newWorkbookSettings();ws.setEncoding("ISO-8859-1");// Carrega a planilha + Encoding (ISO-8859-1)Workbookworkbook=Workbook.getWorkbook(newFile(fileName),ws);StringsheetName=args[1];Sheetsheet=workbook.getSheet(sheetName);if(sheetName!=null&&sheetName.equals(sheet.getName())){System.out.println("Nome da aba : "+sheet.getName());}StringBuildervalidationErrors=newStringBuilder();introws=sheet.getRows();FILE_NAMES=newString[rows];for(inti=1;i<rows;i++){CellsheetFileName=sheet.getCell(0,i);if(sheetFileName.getContents()!=null&&sheetFileName.getContents().length()>0){FILE_NAMES[i-1]=sheetFileName.getContents();}Map<String,List<String>>mapFiles=extractMapRevisions();checkFileNames(validationErrors,mapFiles);StringdirGravacao=args[2];log.log(Level.INFO,"Gerando arquivo de validacao");// Grava log, arquivo validation.txtFileUtils.writeStringToFile(newFile(dirGravacao+File.separatorChar+"validation.txt"),validationErrors.toString());log.log(Level.INFO,"Arquivo de validacao gerado com sucesso.");}}}catch(IOExceptione){log.log(Level.SEVERE,"Erro ao gerar o arquivo de log: "+e.getMessage());}catch(BiffExceptione){log.log(Level.SEVERE,"Erro ao ler planilha excel: "+e.getMessage());}}/** * Ordena os arquivos para verificao * * @return Map */privatestaticMap<String,List<String>>extractMapRevisions(){Map<String,List<String>>mapFiles=newHashMap<String,List<String>>();Stringcurr=null;List<String>filesList=null;for(inti=0;i<FILE_NAMES.length;i++){curr=FILE_NAMES[i];if(curr!=null&&curr.contains("_R")){curr=curr.substring(0,curr.indexOf("_R"));if(FILE_NAMES[i].contains("R000")){filesList=newArrayList<String>();mapFiles.put(curr,filesList);}filesList.add(curr);}elseSystem.out.println("O arquivo possui mais de um underline!");}returnmapFiles;}/** * Verifica o nome dos arquivos. * * @param validationErrors * @param mapFiles */privatestaticvoidcheckFileNames(StringBuildervalidationErrors,Map<String,List<String>>mapFiles){validationErrors.append("Validando nomes de arquivos.... \n\n");for(Entry<String,List<String>>entry:mapFiles.entrySet()){validationErrors.append("Validando arquivo "+entry.getKey()+"\n\n");List<String>fileNames=entry.getValue();if(fileNames.size()>1){for(inti=1;i<fileNames.size();i++){StringcurrFileName=fileNames.get(0);StringfileName=fileNames.get(i);intdistance=StringUtils.getLevenshteinDistance(currFileName,fileName);if(distance>0){validationErrors.append("Nome de arquivo diferente:\n - R000: "+currFileName+" \n - R00"+i+": "+fileName+" \n");validationErrors.append("---------------------------------------------------------------------------------------------------\n\n");}}}}}}
AdrianoSB
Talvez seja problema de charset, dependendo da origem a planilha pode ter charset diferente (Windows*, ISO*, UTF* e outros).
Para teste, em cada linha faz isso:
if(StringUtils.IsAsciiPrintable(linha)){
//print OK
} else {
//print ERRO + linha
}
só que ele só pega as primeiras linhas.. as linhas la pra baixo da planilha ele ta aceitando com mais de 1 underline!
D
dante2202
Problema resolvido!
Obrigado a todos pelas respostas.
Segue:
privatestaticMap<String,List<String>>extractMapRevisions(){Map<String,List<String>>mapFiles=newHashMap<String,List<String>>();Stringcurr=null;List<String>filesList=newArrayList<String>();for(inti=0;i<FILE_NAMES.length;i++){curr=FILE_NAMES[i];if(curr!=null&&curr.contains("_R")){curr=curr.substring(0,curr.indexOf("_R"));intcount=StringUtils.countMatches(FILE_NAMES[i],"_");if(count==1){if(FILE_NAMES[i].contains("A000")){mapFiles.put(curr,filesList);}}else{System.out.println("ERRO: Foram encontrados mais de um underline em : "+FILE_NAMES[i]+"Favor Verificar");}filesList.add(curr);}}returnmapFiles;}