Scanner hört nach der 25. Zeile auf

xZise

Aktives Mitglied
Hallo,
auf meinem Laptop (Ubuntu 10.04 x64) hat es wunderbar funktioniert, aber nachdem ich das auf einen Linux Server hochgeladen habe, scheint der Scanner nur bis Zeile 25 zu lesen. Beziehungsweise noch nicht mal komplett diese Zeile.

Der Source Code und folgendes kommt heraus, wenn ich jede Zeile ausgebe:
Pastey.net - WoWI paste bin
Und so sieht die Datei aus:
Pastey.net - WoWI paste bin
Wenn ich diese oder eine vorhergehende Zeile lösche, dann meckert er übrigens einfach entsprechend in der gleichen (25.) Zeile weiter. Also scheint es nicht an der Datei selber zu liegen.

Außerdem liest er die 25. Zeile immer mit einer bestimmten Länge ein. Es ist dabei irrelevant wie lang die Zeilen darüber sind.

Fabian
 
Zuletzt bearbeitet:
Der Code ist so schlecht lesbar und zudem fehlen da einige Klassen und extrem kompliziert sieht er auch aus 😀 Mache mal ein simples ausführbares Beispiel, dann kann man evtl. helfen.
 
Es ging mir nicht um das ganze Projekt, sondern nur um diese Methode. Alles andere arbeitet wie gewünscht, nur liest die Methode HModConnection.getWarps(String) nicht alle Zeilen ein.

Hier eine Standalone version:
Java:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        List<String> lines = getWarps(new File("/home/fabian/s684/plugins/xWarp/hmod.txt"));
        System.out.println("Count: " + lines.size());
        for (String string : lines) {
            System.out.println("Line: " + string);
        }
    }
    
    public static List<String> getWarps(File file) {
        List<String> lines = new ArrayList<String>();
        Scanner scanner;
        try {
            Integer version = null;
            int lineNum = 0;
            scanner = new Scanner(file);
            try {
                while (scanner.hasNext()) {
                    String line = scanner.nextLine();
                    lineNum++;
                    if (line.length() > 0 && !line.startsWith("#")) {
                        if (line.matches("!version\\s*\\d+\\s*")) {
                            int tempVersion = 0;
                            try {
                                tempVersion = Integer.parseInt(line.substring(8).trim());
                            } catch (NumberFormatException nfe) {
                                System.out.println("Version tag is invalid number.");
                            }
                            if (version == null) {
                                version = tempVersion;
                            } else if (version != tempVersion) {
                                System.out.println("Different version tags found (line: " + lineNum + "), choose first found: " + version);
                            }
                        } else {
                            lines.add(line);
                        }
                    }
                }
            } finally {
                scanner.close();
            }
        } catch (FileNotFoundException e) {
            System.out.println("hmod file not found!");
        }
        return lines;
    }
}
Außerdem fehlt Bukkit da es sich um ein Plugin dafür handelt.

Und selbst mit der Standalone version hat er diesen Fehler.

Fabian

PS: Wegen schlecht lesbar/kompliziert, ist das wohl ansichtssache 😉 Ist halt ein relativ komplexes Plugin, aber wenn du Verbesserungsvorschläge hast, dann immer her damit.
 
Zuletzt bearbeitet:
mit der oben verlinkten datei als eingabe wird dennoch alles ausgegeben
vielleicht ein kodierungsproblem - runtergeladen nur als ascii -> umlaute kaputt
 
Okay, ich habe ein paar Zeilen mit Umlauten gelöscht, und er liest mehr Zeilen als vorher ein. Nur ist die Frage wieso? Ich meine, ich kann die Datei ganz normal via ssh und vim öffnen, und ich habe sie nur mit sftp (also auch via ssh) hoch-/heruntergeladen.

Ich werde morgen mal mehr testen (also löschen von mehreren Zeilen ohne Umlauten, öffnen auf den Laptop nach dem Herunterladen).

Fabian
 
Okay nachdem ich alle Zeilen mit Umlauten gelöscht habe, scheint das Testprogramm es einzulesen. Naja ich muss mal gucken in welcher Kodierung der SSH daemon darauf läuft. Weil mir ist heute aufgefallen, dass Umlaute via SSH als Befehl gar nicht gehen, und vim erkennt nur die kleinen Umlaute und zeigt bei Ä „~D“, Ö „~V“ sowie Ü wird zu „~\“.

Fabian
 

Neue Themen


Zurück
Oben