Можно ли создать функцию, которая читает половину текстового файла ...?
Чтобы прочитать половину файла, прочитайте байт - пропустите байт.
int ch;
while((ch = fgetc(myFile)) != EOF) {
putchar(ch);
fseek(myFile, 1, SEEK_CUR);
}
Чтобы напечатать каждую вторую строку, используйте возвращаемое значение fgets()
и установите флажок print
.
bool print = true;
while(fgets(line, sizeof line, myFile)) {
if (print) {
fputs(line, stdout);
}
print = !print;
}
... есть ли способ получить только первую или вторую половину файла для чтения?
Аууу, это не очень весело - добавить это условие в конец сообщения.
Первая длина файла поиска:
Как узнать размер файла
Как вы определяете размер файла
В Linux я бы использовал stat64();
long size = foo(); // from one of above 3 ideas
Читать первую половину:
rewind(myFile);
int ch;
while(size-- > 0 && (ch = fgetc(myFile)) != EOF) {
putchar(ch);
}
Читать 2-ую половину:
fseek(myFile, size/2, SEEK_SET);
int ch;
while((ch = fgetc(myFile)) != EOF) {
putchar(ch);
}
Вот забавная идея напечатать первую половину, просто напишите несколько функций очереди.
queue *q = q_init();
int ch;
// Read 2 bytes, save, write earliest byte
while((ch = fgetc(myFile)) != EOF) {
q_append(q, ch);
ch = fgetc(myFile);
if (ch != EOF) q_append(q, ch);
ch = q_get(q);
putchar(ch);
}
q = q_uninit(q);