Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Работа со строками txt файла.

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

Новый участник


Сообщения: 14
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


В общем ситуация такая:
Есть файл со строками типа
Код: Выделить весь код
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
и т.д.

Заранее громадное спасибо

Отправлено: 06:37, 18-06-2012

 

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Заготовка написана на коленке, С++
Код: Выделить весь код
//---------------------------------------------------------------------------
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();
	 }
}
//---------------------------------------------------------------------------

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 15:03, 19-06-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 198
Благодарности: 51

Профиль | Отправить PM | Цитировать


Могу предложить такое решение.
Код: Выделить весь код
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.

Отправлено: 18:03, 19-06-2012 | #3


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


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

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 22:00, 19-06-2012 | #4


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:50, 19-06-2012 | #5


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


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

Отправлено: 23:28, 19-06-2012 | #6


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата ferget:
как раз для C++ Builder, вроде должен работать в 6 версии »
Будет работать и в шестёрке. Единственное, пробелами разделять слова не идеальный вариант, вдруг в имени или фамилии будет пробел? лучле выбрать другой разделитель, например звёздочку * и исправить здесь
Код: Выделить весь код
...
  chSpace<<'*';
...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 13:20, 20-06-2012 | #7


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 07:59, 21-06-2012 | #8


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


У формы свойство 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();
      }
   }
}
//---------------------------------------------------------------------------

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 16:57, 21-06-2012 | #9


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png Capture.PNG
(93.5 Kb, 7 просмотров)

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

Отправлено: 09:11, 22-06-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Работа со строками txt файла.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBA - Работа со строками zena Программирование и базы данных 5 21-02-2011 09:03
C/C++ - [решено] Работа со строками. Буфер содержит нуль-терминатор Dr.Dark Программирование и базы данных 5 29-08-2010 16:13
C/C++ - [решено] Работа с строками crashtuak Программирование и базы данных 16 26-03-2009 01:21
CMD/BAT - [решено] Работа со строками в cmd-файлах melato Скриптовые языки администрирования Windows 3 30-01-2007 08:52
Работа с почтовиком с помощью бат файла lehha Программирование и базы данных 5 18-04-2003 03:08




 
Переход