2017-10-28 3 views
1

Ich brauche Hilfe beim Lesen von Daten aus der TXT-Datei. Ich möchte angeben, ob die Zeile innerhalb des Projektabschnitts liegt. Und wenn ja, suchen Sie nach com.google.maps.api:1.9.10. Ich sollte Informationen erhalten, ob es in project Abschnitt ist. Ich stelle hier keinen Quellcode zur Verfügung, weil ich keine Ahnung habe, wie ich über diese Situation nachdenken soll. Vielleicht hast du eine Idee, wie du das lösen kannst.groovy lesen Daten aus der Datei

Probeneingang:

Below Beispiel Daten aus der Datei:

+--- project :google-json 
| +--- other data 
| +--- other data 
| +--- com.google.maps.api:1.9.10 
| +--- other data 
+--- something :google-json 
| +--- other data 
| +--- other data 
| +--- com.google.maps.api:2.2.2 
| +--- other data 
+0

Dies wird wahrscheinlich auf Eis gelegt werden, da es die üblichen Anforderungen für eine Coding-Frage nicht erfüllt. Sie sollten jedoch versuchen, auf Englisch aufzuschreiben, was Sie tun möchten. Verwenden Sie dies als Ihren Plan, um das Problem in Stücke zu zerbrechen. Ein Hinweis: Wie sind Abschnitte abgegrenzt? Woher weißt du, dass eine Zeile eine Abschnittsüberschrift oder eine Art von Daten ist? Ist das Bestellen wichtig beim Lesen? Sie könnten auch in Betracht ziehen, diese Daten in ein hierarchisches Zwischenformat wie JSON zu übersetzen. Beachten Sie, dass niemand diesen Code für Sie entwerfen oder schreiben wird. – jdv

Antwort

1

Erste Idee hier ist, um Schleife über die mit Zeilenendmarke gespaltet Linien (\n), dann prüfen Sie, ob Sie in den entsprechenden Abschnitt sind und dann verifizieren, ob irgendeine nachfolgende Zeile den gewünschten Wert enthält. Wenn ja, ist es gefunden, sonst nicht.

Die zweite Idee ist, mehr datenorientierten Ansatz zu verwenden. Verwenden Sie die Regex, um Daten in Abschnitte aufzuteilen, sie dann in Tupel zu transformieren und nach einem Tupel mit dem entsprechenden Namen zu suchen, das den gewünschten Wert in seinem Wert hat. Hier ist, wie es geht:

def input = ''' 
+--- project :google-json 
| +--- other data 
| +--- other data 
| +--- com.google.maps.api:1.9.10 
| +--- other data 
+--- something :google-json 
| +--- other data 
| +--- other data 
| +--- com.google.maps.api:2.2.2 
| +--- other data 
''' 
input 
    .split(/(?ms)(^\+---)/) 
    .toList() 
    .findAll { !it.trim().isEmpty() } 
    .collect { 
     def section = it.substring(0,it.indexOf('\n')) 
     new Tuple(
      section, 
      (it - section) 
      .trim() 
      .split('\n') 
      .collect { (it - '| +---').trim() } 
     ) 
    } 
    .find { 
     it.get(0) == 'project :google-json' && it.get(1).find { 'com.google.maps.api:1.9.10'.equals(it) } 
    } 
  1. Split Linien mit entsprechenden regulären Ausdruck - hier eine Zeile mit das beginnt mit +--- ein Trennzeichen ist.
  2. Seit Split kehrt Array, drehen Sie es Int-Liste.
  3. Entfernen Sie alle leeren Elemente.
  4. Daten in Tupel transformieren. Der erste Wert ist der Abschnittsname (z. B. project :google-json), der zweite Wert ist eine Liste von Abhängigkeiten mit entfernten ASCII-Kunstbaumelementen.
  5. Suchen Sie das gewünschte Tupel.