Last active
May 25, 2020 18:12
-
-
Save sampletext32/01ee15b3ad84268ab6bbd9591ca7e734 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// getdor2.cpp: главный файл проекта. | |
/*Пример работы с файлами. Использует стандартные функции С++ для работы с текстовым файлом | |
Программа позволяет дополнить описанную в программе таблицу дорог либо из файла либо с клавиатуры. | |
После этого находит в таблице заданную мнемокодом дорогу. | |
*/ | |
#include <iostream> | |
#include <cstdio> | |
#include <fstream> | |
using namespace std; | |
#define NDOR 58 | |
//Объявление используемых функций | |
void AsciiRus(char s[]); //перекодировка русских букв из ASCII 866 в 1251 | |
void savedor(); //сохранить таблицу дорог в файле | |
void vvoddor(); //ввод доп.дорог с сохранением их в файле | |
int finddor(char*); //поиск дороги по мнемокоду | |
//Глобальные переменные | |
int idor = 55; | |
typedef char Strng[30]; | |
Strng dortabl[NDOR][2] = { | |
{"АЗЕРБАЙДЖАНСКАЯ", "Азерб."}, | |
{"АМУРСКАЯ", "Амур."}, | |
{"АШХАБАДСКАЯ", "Ашх."}, | |
{"БЕЛОРУССКАЯ", "Бел."}, | |
{"БРЕСТ-ЛИТОВСКАЯ", "Бр.-Лит."}, | |
{"ВИННИЦКАЯ", "Вин."}, | |
{"ВОСТ.-СИБИРСКАЯ", "В.-Сиб."}, | |
{"ГОРЬКОВСКАЯ", "Горьк."}, | |
{"ДАЛЬНЕВОСТОЧНАЯ", "Д.-Вост."}, | |
{"ЗАБАЙКАЛЬСКАЯ", "Заб."}, | |
{"ЗАКАВКАЗСКАЯ", "Закав."}, | |
{"ЗАПАДНАЯ", "Зап."}, | |
{"им. В. В. КУЙБЫШЕВА", "Кбш."}, | |
{"КАЗАНСКАЯ", "Каз."}, | |
{"КАЛИНИНСКАЯ", "Калин."}, | |
{"КАРАГАНДИНСКАЯ", "Караг."}, | |
{"КИРОВСКАЯ", "Кир."}, | |
{"КИШИНЕВСКАЯ", "Кишин."}, | |
{"КОВЕЛЬСКАЯ", "Ков."}, | |
{"КРАСНОЯРСКАЯ", "Красн."}, | |
{"ЛАТВИЙСКАЯ", "Латв."}, | |
{"ЛЕНИНГРАДСКАЯ", "Лен."}, | |
{"ЛИТОВСКАЯ", "Лит."}, | |
{"ЛЬВОВСКАЯ", "Львов."}, | |
{"МОСКОВСКО-ДОНБАССКАЯ", "М.-Донб."}, | |
{"МОСКОВСКО-КИЕВСКАЯ", "М.-Киев."}, | |
{"МОСКОВСКО-КИЕВСКАЯ", "М.-Киев."}, | |
{"МОСКОВСКО-КУРСКАЯ", "М.-Кур."}, | |
{"МОСКОВСКО-РЯЗАНСКАЯ", "М.-Ряз."}, | |
{"ОДЕССКАЯ", "Одес."}, | |
{"ОКТЯБРЬСКАЯ", "Окт."}, | |
{"ОМСКАЯ", "Омск."}, | |
{"ОРДЖОНИКИДЗЕВСКАЯ", "Ордж."}, | |
{"ОРЕНБУРГСКАЯ", "Оренб."}, | |
{"ПЕРМСКАЯ", "Перм."}, | |
{"ПЕЧОРСКАЯ", "Печор."}, | |
{"ПРИМОРСКАЯ", "Примор."}, | |
{"РЯЗАНО-УРАЛЬСКАЯ", "Р.-Ур."}, | |
{"СВЕРДЛОВСКАЯ", "Сверд."}, | |
{"СЕВЕРНАЯ", "Сев."}, | |
{"СЕВЕРО-ДОНЕЦКАЯ", "С.-Дон."}, | |
{"СЕВЕРО-КАВКАЗСКАЯ", "С.-Кав."}, | |
{"СТАЛИНГРАДСКАЯ", "Сталгр."}, | |
{"СТАЛИНСКАЯ", "Стал."}, | |
{"ТАШКЕНТСКАЯ", "Таш."}, | |
{"ТОМСКАЯ", "Том."}, | |
{"ТУРКЕСТАНО-СИБИРСКАЯ", "Т.-Сиб."}, | |
{"ЭСТОНСКАЯ", "Эст."}, | |
{"ЮГО-ВОСТОЧНАЯ", "Ю.-Вост."}, | |
{"ЮГО-ЗАПАДНАЯ", "Ю.-Зап."}, | |
{"ЮЖНАЯ", "Южн."}, | |
{"ЮГО-ДОНЕЦКАЯ", "Ю.-Дон."}, | |
{"ЮЖНО-УРАЛЬСКАЯ", "Ю.-УР."}, | |
{"ЯРОСЛАВСКАЯ", "Яросл."}, | |
{"ЮЖНО-САХАЛИНСКАЯ", "Ю.-Сах."} | |
}; | |
char stroka[80]; | |
char* pchar; | |
char* pc; | |
char stab = '\t'; | |
int main() | |
{ | |
setlocale(LC_ALL, "Russian"); | |
ifstream inFile; //FILE * pf1; //указатель на входной (с допонительными дорогами) файл | |
inFile.open("dor48d.txt"); //f1=fopen("dor48d.txt","r"); //открыть входной файл для чтения | |
if (!inFile) //(pf1==NULL) | |
{ | |
cout << "Ошибка открытия файла для чтения с именем dor48d.txt\n"; | |
vvoddor(); //ввод доп.дорог | |
} | |
else | |
{ | |
//дозагрузить таблицу дорог (читаем построчно до символа \n не более 80 символов | |
inFile.getline(stroka, 80, '\n'); //inFile>>stroka;//pc=fgets(stroka,79,pf1); | |
while (strlen(stroka) > 0 && !inFile.eof() && idor < NDOR) //(! feof(pf1)) | |
{ | |
stroka[strlen(stroka)] = '\0'; | |
cout << idor << ":" << stroka << "*" << strlen(stroka) << "\n"; | |
if (idor < NDOR) | |
{ | |
/*добавление дорог */ | |
//Выделяем поля namedor и mnkod | |
pchar = strchr(stroka, stab); | |
if (pchar == NULL) | |
{ | |
strcpy_s(dortabl[idor][0], stroka); | |
dortabl[idor][1][0] = '\0'; | |
} | |
else | |
{ | |
*pchar = '\0'; | |
strcpy_s(dortabl[idor][0], stroka); | |
strcpy_s(dortabl[idor][1], pchar + 1); | |
} | |
idor = idor + 1; | |
} | |
// | |
inFile.getline(stroka, 80, '\n'); //inFile>>stroka;//pc=fgets(stroka,79,pf1); | |
} | |
inFile.close(); //fclose(pf1); //закрыть входной файл дорог | |
} | |
//печать таблицы дорог, вместе с длинами полных и сокращенных наименований | |
cout << "idor=" << idor << "\n"; | |
for (int ii = 0; ii < idor; ii++) | |
cout << ii << "\t" << dortabl[ii][0] << "\t" << strlen(dortabl[ii][0]) << "\t" << dortabl[ii][1] << "\t" << | |
strlen(dortabl[ii][1]) << "\n"; | |
//system("pause"); | |
savedor(); //Делаем копию таблицы дорог в файле | |
cout << "Input Mnkod: "; | |
char indor[100]; | |
gets_s(indor); | |
cout << "mnkod866=" << indor << "\n"; | |
AsciiRus(indor); //перекодировать введенную строку из 886 в 1251 | |
cout << "mnkod1251=" << indor << "\n"; | |
int kd = finddor(indor); | |
cout << "kd=" << kd << "\n"; | |
if (kd >= 0) cout << "name=" << dortabl[kd][0] << "\n"; | |
system("PAUSE"); | |
return 0; | |
} | |
int finddor(char* pstr) | |
{ | |
int n = -1; | |
for (int i = 0; i < NDOR; i++) | |
{ | |
//cout<<pstr<<"\t"<<dortabl[i][1]<<"\n"; | |
if (strcmp(pstr, dortabl[i][1]) == 0) | |
{ | |
n = i; | |
break; | |
} | |
} | |
return n; | |
} | |
void AsciiRus(char s[]) //перекодировка русских букв из ASCII 866 в 1251 | |
{ | |
int i = 0, k; | |
do | |
{ | |
k = (int)s[i]; | |
if (k < 0) | |
{ | |
k = k + 256; | |
if (k >= 128 && k <= 175) k = k + 64; //А .... Я а ... п | |
else if (k >= 224 && k <= 239) k = k + 16; //р ... я | |
else if (k == 240) k = k - 72; //k=168; Ё | |
else | |
if (k == 241) k = k - 57; //k=184; ё | |
s[i] = (char)k; | |
} | |
i++; | |
} | |
while (s[i] != '\0'); | |
} | |
void savedor() //Делаем копию таблицы дорог в файле | |
{ | |
ofstream outFile; //FILE * pf2; | |
outFile.open("dor48new.txt"); //pf2=fopen("dor48new.txt","w"); //открыть выходной файл для записи | |
if (!outFile) //(pf2==NULL) | |
{ | |
cout << "Ошибка открытия файла для чтения с именем dor48new.txt\n"; | |
system("pause"); | |
return; | |
} | |
else | |
{ | |
for (int ii = 0; ii < idor; ii++) | |
{ | |
strcpy_s(stroka, dortabl[ii][0]); | |
outFile << stroka << "\t"; //fputs(stroka,pf2);fputs("\t",pf2); | |
strcpy_s(stroka, dortabl[ii][1]); | |
outFile << stroka << "\n"; //fputs(stroka,pf2); fputs("\n",pf2); | |
} | |
outFile.close(); //fclose(pf2); //закрыть выходной файл дорог | |
} | |
} | |
void vvoddor() //ввод дополнительных дорог в таблицу с сохранением в файле | |
{ | |
ofstream outFile; //FILE * pf2; | |
outFile.open("dor48d.txt"); //pf2=fopen("dor48d.txt","w"); //открыть выходной файл для записи | |
if (!outFile) //(pf2==NULL) | |
cout << "Ошибка открытия файла для записи с именем dor48d.txt\n"; | |
else | |
{ | |
cout << "Вводите полное и сокращенное имя доп. дорог через символ табуляции\n"; | |
strcpy_s(stroka, " "); //инициализация буфера ввода | |
gets_s(stroka); //ввести первую строку | |
while (strlen(stroka) > 0 && idor < NDOR) //цикл пока не пустая строка | |
{ | |
AsciiRus(stroka); | |
outFile << stroka << "\n"; //fputs(stroka,pf2); fputs("\n",pf2); | |
gets_s(stroka); //ввести следующую строку | |
idor++; | |
} | |
outFile.close(); //fclose(pf2); //закрыть выходной файл дополниттельных дорог | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment