Разное - [решено] Работа со строками txt файла.

Аватара пользователя
kirillgoogle

Разное - [решено] Работа со строками txt файла.

Сообщение kirillgoogle »

В общем ситуация такая:

Есть файл со строками типа



Код:

Код: Выделить всё

1Имя 1Фамилия 	8946546464
2Имя 2Фамилия	894646546
3Имя 3Фамилия	8978975999

И нужен скрипт, который бы создавал файлы с такими записями (если из примера):

1 файл:



Код:

Код: Выделить всё

BEGIN:VCARD
VERSION:2.1
N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:1Имя 1Фамилия
TEL;WORK:8946546464 
END:VCARD

2 файл:



Код:

Код: Выделить всё

BEGIN:VCARD
VERSION:2.1
N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:2Имя 2Фамилия
TEL;WORK:894646546 
END:VCARD

3 файл:



Код:

Код: Выделить всё

BEGIN:VCARD
VERSION:2.1
N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:3Имя 3Фамилия
TEL;WORK:8978975999 
END:VCARD

и т.д.



Заранее громадное[/i] спасибо Изображение
Аватара пользователя
Drongo

Re: Разное - [решено] Работа со строками txt файла.

Сообщение Drongo »

Заготовка написана на коленке, С++

Код: Выделить всё

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   AnsiString fName, lName, nTelefon, NameFile;
   TSysCharSet chSpace;
   chSpace<<' ';
   TStringList *TokenSpace = new TStringList();
   Memo2->Clear();
   for(int i = 0; i < Memo1->Lines->Count; i++){
	  ExtractStrings(chSpace, chSpace, Memo1->Lines->Strings[i].c_str(), TokenSpace);
	  // Здесь можно поставить проверку на то что
	  // все три необходимые записи (имя, фамилия, телефон) - есть.
	  fName = TokenSpace->Strings[0];
	  lName = TokenSpace->Strings[1];
	  nTelefon = TokenSpace->Strings[2];
	  Memo2->Lines->Add("BEGIN:VCARD");
	  Memo2->Lines->Add("VERSION:2.1");
	  Memo2->Lines->Add("N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:" + fName + " " + lName);
	  Memo2->Lines->Add("TEL;WORK:" + nTelefon);
	  Memo2->Lines->Add("END:VCARD");
	  NameFile = String(FormatFloat("000", i) + ".txt");
	  Memo2->Lines->SaveToFile(NameFile);
	  TokenSpace->Clear();
	  Memo2->Clear();
	 }
}
//---------------------------------------------------------------------------
Аватара пользователя
PhilB

Re: Разное - [решено] Работа со строками txt файла.

Сообщение PhilB »

Могу предложить такое решение.



Код:

Код: Выделить всё

awk '{print "BEGIN:VCARD\nVERSION:2.1\nN;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:",$1$2,"\nTEL;WORK:"$3"END:VCARD" ;}' input_file | split -l 5

Если вы под виндой, то необходимо установить awk и split.
Аватара пользователя
Drongo

Re: Разное - [решено] Работа со строками txt файла.

Сообщение Drongo »

Автор походу даже не озвучил, на каком языке ему нужна реализация. Изображение
Аватара пользователя
kirillgoogle

Re: Разное - [решено] Работа со строками txt файла.

Сообщение kirillgoogle »

Как раз тут-то и кроется загвоздка: я знаю только batch, который едва ли можно языком назвать) Изображение Теорию знаю, но в деталях... Borland C++ Builder 6 для оного сойдёт? Изображение
Аватара пользователя
ferget

Re: Разное - [решено] Работа со строками txt файла.

Сообщение ferget »

Код Drongo как раз для C++ Builder, вроде должен работать в 6 версии
Аватара пользователя
Drongo

Re: Разное - [решено] Работа со строками txt файла.

Сообщение Drongo »

Цитата ferget:



как раз для C++ Builder, вроде должен работать в 6 версии
Разное - [решено] Работа со строками txt файла.




Будет работать и в шестёрке. Единственное, пробелами разделять слова не идеальный вариант, вдруг в имени или фамилии будет пробел? лучле выбрать другой разделитель, например звёздочку * и исправить здесь



Код:

Код: Выделить всё

...
  chSpace
Аватара пользователя
kirillgoogle

Re: Разное - [решено] Работа со строками txt файла.

Сообщение kirillgoogle »

Я так понимаю, нужно всё содержимое этого документа скопировать в поле MEMO1, да? Только при этом у меня вся кириллица заменяется вопросительными знаками, какую нужно использовать кодировку?
Аватара пользователя
Drongo

Re: Разное - [решено] Работа со строками txt файла.

Сообщение Drongo »

У формы свойство Charset поставьте Russian_Charset или добавьте вот такие строки, при нажатии на кнопку выскочит диалоговое окно добавления файла, добавьте компонент OpenDialog на форму.



Код: Выделить всё

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   AnsiString fName, lName, nTelefon, NameFile;
   TSysCharSet chSpace;
   chSpace<<' ';
   TStringList *TokenSpace = new TStringList();
   Memo2->Clear();
   if(OpenDialog1->Execute()){
   Memo1->Lines->LoadFromFile(OpenDialog->FileName);
      for(int i = 0; i < Memo1->Lines->Count; i++){
         ExtractStrings(chSpace, chSpace, Memo1->Lines->Strings[i].c_str(), TokenSpace);
        // Здесь можно поставить проверку на то что
        // все три необходимые записи (имя, фамилия, телефон) - есть.
        fName = TokenSpace->Strings[0];
        lName = TokenSpace->Strings[1];
        nTelefon = TokenSpace->Strings[2];
        Memo2->Lines->Add("BEGIN:VCARD");
        Memo2->Lines->Add("VERSION:2.1");
        Memo2->Lines->Add("N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:" + fName + " " + lName);
        Memo2->Lines->Add("TEL;WORK:" + nTelefon);
        Memo2->Lines->Add("END:VCARD");
        NameFile = String(FormatFloat("000", i) + ".txt");
        Memo2->Lines->SaveToFile(NameFile);
        TokenSpace->Clear();
        Memo2->Clear();
      }
   }
}
//---------------------------------------------------------------------------
Аватара пользователя
kirillgoogle

Re: Разное - [решено] Работа со строками txt файла.

Сообщение kirillgoogle »

Ошибка, хотя OpenDialog благополучно стоит
Вложения

[Расширение png было запрещено, вложение больше недоступно.]

Ответить

Вернуться в «Программирование и базы данных»