Вставка пробелов в файл - C (СИ)
Формулировка задачи:
В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов (пробелы в строке должны быть вставлены равномерно).
В общем начал писать программу, ниже код:
Здесь рассмотрен случай, если файл пуст. Но также файл может быть и с содержимым.
Я думаю, что содержимое str[1000] просматривается на строки, в которых будут три случая. Если строка файла <80, =80 и >80.
Т.е.
В общем прошу помощи.. подсказать как лучше организовать будет эти три случая)
Я так понимаю, что ещё в каждом случае будет по 3 случая. Т.е., если (str[i] == ' ')&&(str[i]==' '), если (str[i] == ' ')&&(str[i]!=' '), если (str[i] != ' ').
Эти три подслучая, лучше подпрограммой сделать?.
P.S. Пользовался поиском - ничего толкового не нашел.
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#include <stdio>
#include <stdlib>
int main(int argc, char* argv[])
{
char str[1000];
int i, j;
FILE *file;
file = fopen("a.txt", "a+");
/*Выводим содержимое файла*/
printf("Soderjanie faila:\n");
fgets(str, 1000, file);
puts(str);
/*Если файл пуст - заполнение пробелами*/
if (fscanf(file, "%c", str) < 1)
{
printf("File pust! Zapolnenie probelami...\n\nGotovo!");
for (i = 0; i < 10; i++)
{
for (j = 0; j < 80; j++)
{
fputc(' ', file);
if ((i == 9) && (j == 79))
fclose(file);
}
fputc('\n', file);
}
}
else
{
printf("File ne pust! Zapolnenie probelami...\n\nGotovo!");
fclose(file);
}
getchar();
return 0;
}
//---------------------------------------------------------------------------for(i = 0; i < 1000; i++)
{
if (str[i] == '\n') // <80
{
k = i;
/*Код*/
}
/*Остальные три случая*/
}Решение задачи: «Вставка пробелов в файл»
textual
Листинг программы
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#include <stdio>
#include <stdlib>
#include <string>
int main(int argc, char* argv[])
{
char str[1000];
int i, j, k = 0, r, p;
FILE *file;
FILE *file2;
char *a[5] = {"a.txt"};
char *b[5] = {"b.txt"};
file = fopen(*a, "r"); // Îòêðûòèå ГґГ*éëГ*
file2 = fopen(*b, "a");
/*ÏðîâåðêГ* Г*Г* äîñòóïГ*îñòü îòêðûòèÿ ГґГ*éëГ**/
if (!file)
{
fprintf(stderr, "Ne mogu otkrit fail\n");
getchar();
//fclose(file);
exit(1);
}
/*Âûâîäèì ñîäåðæèìîå ГґГ*éëГ**/
printf("Soderjanie faila:\n");
while (fgets(str, 80, file) != NULL)
{
printf("%s", str);
r = strlen(str);
printf("\n%d", r);
if (str[r-1] == '\n')
{
k = 1;
j = 81;
}
else
{
k = 0;
j = 80;
}
if (r < j) // Åñëè ГҐГ±ГІГј ñâîáîäГ*ûå ìåñòГ* Гў ñòðîêå
{
if (k == 1) // Ñìîòðèì ГҐГ±ГІГј ëè Гў ýòîé ñòðîêå ГЄГ*ðåòêГ*
p = 81 - r; // Ñ÷èòГ*ГҐГ¬ êîëè÷åñòâî ñâîáîäГ*ûõ ìåñò
else
p = 80 - r;
printf("\n%d", k);
i = r; // ÏåðåêèäûâГ*ГҐГ¬ Г±Г·ГҐГІГ·ГЁГЄ Г*Г* ïåðâîå ñâîáîäГ*îå ìåñòî ñòðîêè
while (p > 1)
{
str[i] = ' ';
i++;
p--;
}
if (k == 1) // Åñëè ГҐГ±ГІГј ГЄГ*ðåòêГ*, ГІГ® ïåðåñòГ*âëÿåì ГҐВё
{
str[r-1] = ' ';
str[80] = '\n';
}
}
fputs(str, file2);
k = 0;
}
fclose(file);
fclose(file2);
getchar();
return 0;
}
//---------------------------------------------------------------------------
Объяснение кода листинга программы
В данном коде выполняется вставка пробелов в файл.
- Создаются две переменные
fileиfile2, которые используются для работы с файлами. - Переменная
kинициализируется значением 0, а переменнаяpпока не используется. - В цикле
whileсчитывается каждая строка из первого файлаfile. - В каждой строке подсчитывается количество символов (
r), и если последний символ строки - это символ новой строки (\n), то значение переменнойkменяется на 1, а значение переменнойpвычисляется как разница между максимальным количеством пробелов, которые можно вставить в строку (81 - r), и текущим количеством пробелов, которые уже вставлены (i). - Если
kравно 1, то в текущую строку вставляется пробел вместо последнего символа. - После завершения цикла
whileдля каждой строки, значение переменнойkсбрасывается обратно в 0. - Вставленные строки записываются во второй файл
file2. - После завершения работы с файлами, они закрываются, и программа завершается.