Java - подобный Консоли веб-[закрытый] апплет

Не могли бы вы попробовать следующее.

awk '{a[$1];b[$2]} END{for(i in a){if(i in b){continue};print i}}' Input_file
cluster-10
cluster-16

Допустим, мы хотим отправить значения столбцов, которые мы хотим сравнить в переменных (awk переменных), а затем попробуйте выполнить следующее.

awk -v col1="1" -v col2="2" '{a[$col1];b[$col2]} END{for(i in a){if(i in b){continue};print i}}'  Input_file
cluster-10
cluster-16

Измените значения переменных -v col1 и -v col2 в соответствии с новыми значениями столбцов, которые вы хотите сравнить, и тогда они будут сравнивать их значения (установите флажок, чтобы получить для одного столбца уникальные значения, видя другой столбец).

5
задан Dean Rather 14 October 2008 в 02:37
поделиться

5 ответов

Несомненно, просто превратите в апплет, поместите маленькое колебание UI на него с JFrame с двумя компонентами - один для записи вывода к, и один для ввода исходных данных от. Встройте апплет в страницу.

4
ответ дан 13 December 2019 в 19:39
поделиться

Как главный пример великолепного и невероятно полезного подобного cnsole веб-приложения, см. goosh, Google Shell. Я не могу предположить просматривать Сеть без него больше.

Предоставленный, нет никакого исходного кода, но Вы могли бы вынуть немного его волшебства при помощи Firebug или около этого.

Используя TextArea мог бы быть склонный к ошибке подход. Помните, что необходимо будет сделать и ввод и вывод к этому TextArea и что необходимо таким образом отслеживать позицию курсора. Я предложил бы, чтобы, если Вы действительно делаете этот подход, Вы абстрагировали далеко по плоскости TextArea (наследование, возможно?) и использование компонент, который имеет, например, a prompt() показать подсказку и включить вход и также следуют за обычной абстракцией оболочки наличия stdin (InputStream, который читает из подсказки, но может быть связан с, скажем, файлы или так), и stdout и возможно stderr, OutputStreams, связанный с текстом TextArea.

Это не легкая задача, и я не знаю ни о какой библиотеке, чтобы сделать это.

3
ответ дан 13 December 2019 в 19:39
поделиться

Я сделал как предложенный Lars и записал свое собственное.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.awt.Font;

public class Applet extends JFrame {
    static final long serialVersionUID = 1;

    /** Text area for console output. */
    protected JTextArea textArea;

    /** Text box for user input. */
    protected JTextField textBox;

    /** "GO" button, in case they don't know to hit enter. */
    protected JButton goButton;

    protected PrintStream printStream;
    protected BufferedReader bufferedReader;

    /**
     * This function is called when they hit ENTER or click GO.
     */
    ActionListener actionListener = new ActionListener() {
        public void actionPerformed(ActionEvent actionEvent) {
            goButton.setEnabled(false);
            SwingUtilities.invokeLater(
                new Thread() {
                    public void run() {
                        String userInput = textBox.getText();
                        printStream.println("> "+userInput);
                        Input.inString = userInput;
                        textBox.setText("");
                        goButton.setEnabled(true);
                    }
                }   
            );
        }
    };

    public void println(final String string) {
        SwingUtilities.invokeLater(
            new Thread() {
                public void run() {
                    printStream.println(string);
                }
            }   
        );
    }

    public void printmsg(final String string) {
        SwingUtilities.invokeLater(
            new Thread() {
                public void run() {
                    printStream.print(string);
                }
            }   
        );
    }

    public Applet() throws IOException {
        super("My Applet Title");

        Container contentPane = getContentPane();

        textArea = new JTextArea(30, 60);
        JScrollPane jScrollPane = new JScrollPane(textArea);
        final JScrollBar jScrollBar = jScrollPane.getVerticalScrollBar();
        contentPane.add(BorderLayout.NORTH, jScrollPane);
        textArea.setFocusable(false);
        textArea.setAutoscrolls(true);
        textArea.setFont(new Font("Comic Sans MS", Font.TRUETYPE_FONT, 14));

        // TODO This might be overkill
        new Thread() {
            public void run() {
                while(true) {
                    jScrollBar.setValue(jScrollBar.getMaximum());
                    try{
                        Thread.sleep(100);
                    } catch (Exception e) {}
                }
            }
        }.start();

        JPanel panel;
        contentPane.add(BorderLayout.CENTER, panel = new JPanel());

        panel.add(textBox = new JTextField(55));
        textBox.addActionListener(actionListener);

        panel.add(goButton = new JButton("GO"));
        goButton.addActionListener(actionListener);

        pack();

        // End of GUI stuff

        PipedInputStream inputStream;
        PipedOutputStream outputStream;

        inputStream = new PipedInputStream();
        outputStream = new PipedOutputStream(inputStream);

        bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "ISO8859_1"));
        printStream = new PrintStream(outputStream);

        new Thread() {
            public void run() {
                try {
                    String line;
                    while ((line = bufferedReader.readLine()) != null) {
                        textArea.append(line+"\n");
                    }
                } catch (IOException ioException) {
                    textArea.append("ERROR");
                }
            }
        }.start();
    }
}

Это ниже кода было в отдельном классе, "Входе", который имеет статическую строку "inString".

    public static String getString() {
        inString = "";

        // Wait for input
        while (inString == "") {
            try{
                Thread.sleep(100);
            } catch (Exception e) {}
        }

        return inString;
    }

Всюду по продолжительности жизни проекта я, вероятно, поддержу этот код еще немного, но в этой точке - это работает :)

4
ответ дан 13 December 2019 в 19:39
поделиться

Я не забываю видеть клиентский апплет telnet implementationa вокруг несколько лет назад (назад, когда люди использовали telnet). Возможно, Вы могли раскопать их и изменить их.

0
ответ дан 13 December 2019 в 19:39
поделиться

System.out и System.in являются помехами и поэтому злом. Необходимо будет пройти программу, заменяющую их непомехами ("параметризовали сверху"). От апплета Вы не можете использовать System.setOut/setErr/setIn.

Затем Вы в значительной степени отсортированы. Апплет. Добавьте TextArea (или эквивалентный). Добавьте вывод к текстовой области. Ключ записи перечеркивает к входу. Задание сделано.

0
ответ дан 13 December 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: