Форум сайта python.su
Пытаюсь реализовать хотя бы чтение заголовков gp3 (guitar pro) файлов. Но нифига не получается. Формат нигде не описан, но есть окрытые варианты на java. Вот функция, которая по моему мнению добывает из бинарного файла последовательно информацию.
protected String readStringIntegerPlusOne() throws IOException {
byte[] b;
String str;
int lengthPlusOne;
int length;
int r;
lengthPlusOne = readInt(); // reads the expected length + 1
length = lengthPlusOne - 1; // computes the real length
if (lengthPlusOne > 0) {
// reads the real length (as a byte)
r = read();
if (length != r) {
throw new IOException("Wrong string length: should have been "
+ length);
}
b = new byte[length];
read(b);
str = new String(b);
} else {
r = read();
str = "";
}
return str;
}
// Title
s = readStringIntegerPlusOne();
piece.setTitle(s);
// Subtitle
s = readStringIntegerPlusOne();
piece.setSubtitle(s);
// Interpret
s = readStringIntegerPlusOne();
piece.setInterpret(s);
// Album
s = readStringIntegerPlusOne();
piece.setAlbum(s);
// Author of the song
s = readStringIntegerPlusOne();
piece.setAuthorSong(s);
...
Офлайн
lengthPlusOne = readInt(); // зчитує 4 байти if (lengthPlusOne > 0) // дивиться чи не дорівнює lengthPlusOne нулю r = read(); // зчитує якусь кількість байт r - число if (length != r) { // якщо кількість байт в файлі не дорівнює lengthPlusOne - 1 то файл поганий Error("Wrong string length: should have been " + length); } } else { // якщо lengthPlusOne == 0 - функція повертає пусту стрічку r = read(); str = ""; } return str
Отредактировано (Июль 1, 2007 17:39:41)
Офлайн
piece.setTitle(s); piece.setSubtitle(s);piece.setAlbum(s);
додають до зчитаної стрічки якісь свої дані і записують ту стрічку в файл
Отредактировано (Июль 1, 2007 17:42:47)
Офлайн