Erstellen eines Manipulats und einer ArrayList mit JLink

Sep 07 2020

Ich frage mich, ob es möglich ist, diesen Code in ein Manipulat einzufügen. Ich habe es einfach so versucht und die Ergebnisse im Meldungsfeld erhalten:

Als ich dann ein anderes Wort aus dem PopMenu auswählte, bekam ich Folgendes:

...Print[...]Ich dachte, das Problem waren die Anweisungen, also habe ich versucht, eine Arrayliste wie diese zu erstellen, aber sie ist total gescheitert, es gibt kein Ergebnis ...

Needs["JLink`"]

Scanner[archivo_String, palabra_String] :=
 JavaBlock@
  Module[{entrada, linea, numlinea, contiene, ruta, lista, renglon, 
    nop}, numlinea = 1; linea = ""; contiene = False;
   InstallJava[];
   ruta = JavaNew["java.io.File", archivo];
   entrada = JavaNew["java.util.Scanner", ruta];
   lista = JavaNew["java.util.ArrayList"];
   (*Print["File: " <> ruta@getName[]];
   Print["Word:" <> palabra];*)
   While[entrada@hasNext[], linea = entrada@nextLine[]; 
    If[JavaNew["java.lang.String", linea]@
      contains[MakeJavaObject@palabra], 
     renglon = 
      JavaNew["java.lang.String", 
       "Line " <> ToString[numlinea ] <> ": " <> ToString[linea]];
     contiene = True;
     lista@add[renglon];
     JavaObjectToExpression[lista]];
    numlinea++];
   If[! contiene, 
    nop = JavaNew["java.lang.String", 
      ToString[palabra] <> " no se ha encontrado"];
    lista@add[nop];
    JavaObjectToExpression[lista]]]

Ich weiß nicht genau, wie es geht, ich würde mich über Ihre Hilfe freuen.

Antworten

1 JasonB. Sep 08 2020 at 08:26

Das hat nichts mit Manipulateoder zu tun Print. Schauen Sie sich das Ergebnis von an Scanner[file, "issue"]und Sie werden sehen, dass es so ist Null.

Schauen Sie sich Ihren Code an, die ScannerFunktion endet mit einer solchen Anweisung

If[! contiene, <do some stuff>]

Sie haben kein drittes Argument für die If. Und für jedes Wort, das in der Datei enthalten ist, contieneist Trueund so bewerten SieIf[False, <code that is never reached]

Versuche dies:

Scanner[archivo_String, palabra_String] := JavaBlock[
    Module[
        {entrada, linea, numlinea, contiene, ruta, lista, renglon, nop},
        numlinea = 1;
        linea = "";
        contiene = False;
        InstallJava[];
        ruta = JavaNew["java.io.File", archivo];
        entrada = JavaNew["java.util.Scanner", ruta];
        lista = JavaNew @ "java.util.ArrayList";
        While[entrada @ hasNext[],
            linea = MakeJavaObject @ entrada @ nextLine[];
            If[linea @ contains @ palabra,
                renglon = MakeJavaObject @ StringJoin["Line ", ToString @ numlinea, ": ", JavaObjectToExpression @ linea];
                contiene = True;
                lista @ add @ renglon;
                JavaObjectToExpression @ lista
            ];
            ++numlinea
        ];
        If[!contiene,
            lista @ add @ MakeJavaObject @ StringJoin[palabra, " no se ha encontrado"]
        ];
        Column @ JavaObjectToExpression @ lista
    ]
]