public Iterable<String> processInput(String input, boolean skipHeader) throws IOException {
        final BufferedReader br = new BufferedReader(new FileReader(input));
        if (skipHeader) {
            br.readLine();
        }


        return new Iterable<String>() {
            @Override
            public Iterator<String> iterator() {
                return new Iterator<String>() {
                    String line;

                    @Override
                    public boolean hasNext() {
                        if (line != null) {
                            return true;
                        }
                        try {
                            line = br.readLine();
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                        return line != null;
                    }

                    @Override
                    public String next() {
                        if (line != null) {
                            String res = line;
                            line = null;
                            return res;
                        }
                        try {
                            return br.readLine();
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                    }

                    @Override
                    public void remove() {
                        throw new UnsupportedOperationException("Removing from file stream is not supported");
                    }
                };
            }
        };

    }