7

I would like to find a Java library that will allow me to read a PGN file that could contain several chess games, probably with comments inserted also. But, it won't be used to generate moves or play the moves in a board. I just want to read the pgn and get the header section and move section, and dump everything into a database.

Any light that will direct me to the right path is really appreciated. I just need the parser and segment the information from the pgn and then I will do the dumping into the database.

Thanks in advance for any help.

7

After reading a bunch of open source code, I just found out that most of them are relying on Chesspresso which is a solid Java Chess library that can handle move validation, PGN parser (what I was looking for), chessboard renderering, etc.

The code is well-documented and easy to understand. It took me around 30 minutes to read the code and start testing. Pretty happy with this library.

You can download the source code from sourceforge: Chesspresso Source Code

Sample code: (This is a fragment from Game class, I just need to add more detail for the header section and I will be ready to dump each pgn game into my database).

    public String getHeaderString(int line)
{
    if (line == 0) {
        StringBuffer sb = new StringBuffer();
        sb.append(getWhite());
        if (getWhiteElo() != 0) sb.append(" [").append(getWhiteElo()).append("]");
        sb.append(" - ").append(getBlack());
        if (getBlackElo() != 0) sb.append(" [").append(getBlackElo()).append("]");
        sb.append("  ").append(getResultStr()).append("  (").append(getNumOfMoves()).append(")");
        return sb.toString();
    } else if (line == 1) {
        StringBuffer sb = new StringBuffer();
        sb.append(getEvent()).append(", ").append(getSite()).append(", ").append(getDate());
        sb.append("  [").append(getRound()).append("]");
        return sb.toString();
    } else if (line == 2) {
        return getECO();
    } else {
        throw new RuntimeException("Only 3 header lines supported");
    }
}
2

You could use chesslib.

In the README file there is an example of how to load and walk through all the moves from all the games in the PGN file:

    PgnHolder pgn = new PgnHolder("/opt/games/linares_2002.pgn");
    pgn.loadPgn();
    for (Game game: pgn.getGame()) {
        game.loadMoveText();
        MoveList moves = game.getHalfMoves();
        Board board = new Board();
        //Replay all the moves from the game and print the final position in FEN format
        for (Move move: moves) {
            board.doMove(move);
        }
        System.out.println("FEN: " + board.getFen());
    }
1

As a general hint: Look at Open Source Android chess games. Like DroidFish (https://github.com/peterosterlund2/droidfish) Maybe you can find there what you are looking for or at least use it as a starting point.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.