JLink ile Manipulate ve ArrayList Oluşturma

Sep 07 2020

Bu kodu bir Manipulat içine koymanın mümkün olup olmadığını merak ediyorum . Aynen böyle denedim ve sonuçları mesaj kutusunda aldım:

Sonra PopMenu'dan farklı bir kelime seçtiğimde şunu anladım:

Sorunun ...Print[...]talimatlar olduğunu düşündüm, bu yüzden böyle bir dizi listesi oluşturmaya çalıştı ama tamamen başarısız oldu, sonuç yok ...

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]]]

Tam olarak nasıl yapılacağını bilmiyorum, yardımın için minnettarım.

Yanıtlar

1 JasonB. Sep 08 2020 at 08:26

Bunun Manipulateveya ile ilgisi yok Print. Sonucuna Scanner[file, "issue"]bakın ve bunun olduğunu göreceksiniz Null.

Kodunuza bakın, Scannerişlev böyle bir ifadeyle biter

If[! contiene, <do some stuff>]

İçin üçüncü bir argümanınız yok If. Ve dosyasında yer alan herhangi bir kelimeyi, contienebir Trueve size böylece değerlendiriyoruzIf[False, <code that is never reached]

Bunu dene:

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
    ]
]