J'ai le fichier ci-dessous:

name = David 
city = sydney
COuntry = Australia

J'essaie de créer une carte de hachage en utilisant groovy et de la diviser en = et de la stocker dans un tableau tel que part[0] contient avant égal et part[1] contient après égal. J'essaye alors de créer une carte ici.

Sortie souhaitée:

def mapedData = [name :david , city : sydney , country :australia ]

Mon essai:

String s=""
def myfile = new File("C:/Users/.............")
BufferedReader br = new BufferedReader(new FileReader(myfile));

Map<String, String> map = new HashMap<String, String>();
while((s = br.readLine()) != null) {
    if(!s.startsWith("#")) {
        StringTokenizer st=new StringTokenizer(s, "=")
            while(st.hasMoreElements()) {
                String line=st.nextElement().toString().trim()
                print line
            }
        }
    }
}
1
jane 24 nov. 2017 à 11:48

3 réponses

Meilleure réponse

Si vous souhaitez créer une carte à partir d'un fichier dans Groovy, vous pouvez utiliser java.util.Properties pour cela. Voici un exemple:

def file = new File("C:\\stackoverflow\\props.properties")
def props = new Properties()
file.withInputStream { stream ->
    props.load(stream)
}
println(props)

Cela imprime:

[key1:value1, key2:value2]

Le fichier props.properties contient ceci:

# Stackoverflow test
key1 = value1
key2 = value2
4
gil.fernandes 24 nov. 2017 à 08:58

Essayez avec ce code:

def map =[:]
new File("file.txt").eachLine{line->
if(line.contains('=')&& (!line.startsWith("#"))){        
    map[line.split('=')[0]]=line.split('=')[1]
    }
}
println map
1
Bhanuchander Udhayakumar 24 nov. 2017 à 09:58

Voici un one-liner qui fait ce que vous voulez:

new File(/C:\Users\.............\input.txt/).readLines().collectEntries { it.trim().split(/\s*=\s*/) as List }
0
Vampire 24 nov. 2017 à 10:11
47469472