Загрузка из файла слова с разделителем Tab
Такая вот проблемка.
Есть файл допустим такого содержания.
Код:
Слово1<TAB>Слово2<TAB>Слово3
Как видите между словами стоит разделитель который в текстовике ставится нажатием клавишой Tab так вот мне надо загрузить
Слово1->Edit1
Слово2->Edit2
Слово3->Edit3
Помогите реализовать никак не пойму. :( :confused:
Использовать свойство класса TStringList->Delimeter - это раз. Самостоятельно считывать и парсить текст - это два.
А можно код если файл допустим лежит в папке с проектом и называется test.txt повторюсь в нем всего одна строка Слово1<TAB>Слово2<TAB>Слово3
Цитата:
int file;
char ch; // буфер - одна буковка
AnsiString tmp, c;
// открываем
if ( (file = open("filename",O_RDONLY)) > 0) //а открылся ли???
{ //если да, то
do // читаем
{
read(handle, &ch, 1);
c = ch;
if (c == "\t") // вроде проверка на таб
{
// берем tmp и делаем с ним чего хотим
tmp = ""; // очищаем
}
else // читаем слово дальше
{
tmp = tmp+c; // прибавляем буковку
};
} while (!eof(handle)); // до конца файла
}
else {
// если нет, то сообщение надо бы вывести или обработать как-нибудь
};
close(handle); // закроем файлик
Ну а разберешься - упростишь...
Цитата: kot_
Использовать свойство класса TStringList->Delimeter - это раз. Самостоятельно считывать и парсить текст - это два.
Почитать FAQ -- это три. :))
TStringList *LIST = new TStringList;
LIST->Delimiter = "\t";
LIST->DelimitedText = "Слово1<TAB>Слово2<TAB>Слово3";
Точно не помню, и неначем проверить под рукой, порой мануал по ДелимитедТексту...
Цитата: Zeran
А мона так, помому:
TStringList *LIST = new TStringList;
LIST->Delimiter = "\t";
LIST->DelimitedText = "Слово1<TAB>Слово2<TAB>Слово3";
Точно не помню, и неначем проверить под рукой, порой мануал по ДелимитедТексту...
TStringList *LIST = new TStringList;
LIST->Delimiter = "\t";
LIST->DelimitedText = "Слово1<TAB>Слово2<TAB>Слово3";
Точно не помню, и неначем проверить под рукой, порой мануал по ДелимитедТексту...
Ыгы. В FAQ этот метод наличествует.
Код:
LIST->DelimitedText = "Слово1 Слово2<TAB>Слово3 Слово 4 Слово 5<TAB>Слово6";
?
в смысле если добавить пробелы... разобьет не по табам а по пробелам...
ладно,не бейте, воспользовался поиском и попал сюда:
http://forum.codenet.ru/showthread.php?t=31001&highlight=Delimiter
Вот мож кому исчо понадобится, очень даже прикольная ф-ция =)
Код:
TStrings * _split(AnsiString inputString,AnsiString Separator,int counts)
{
TStrings * result = new TStringList();
int pos2=1, pos1=1, cnt;
//=====================================
for (;;)
{
pos2 = AnsiPos(Separator, inputString);
cnt = pos2 - pos1;
if (pos2 == 0){
result->Add(inputString);
break;
} else {
result->Add(inputString.SubString(pos1, cnt));
}
inputString.Delete(pos1, cnt+Separator.Length());
if (pos2 == 0) break;
if (counts != 0 && counts == result->Count)
break;
}
//=====================================
return result;
}
{
TStrings * result = new TStringList();
int pos2=1, pos1=1, cnt;
//=====================================
for (;;)
{
pos2 = AnsiPos(Separator, inputString);
cnt = pos2 - pos1;
if (pos2 == 0){
result->Add(inputString);
break;
} else {
result->Add(inputString.SubString(pos1, cnt));
}
inputString.Delete(pos1, cnt+Separator.Length());
if (pos2 == 0) break;
if (counts != 0 && counts == result->Count)
break;
}
//=====================================
return result;
}
AnsiString inputString - строка, которую нуна порубать
AnsiString Separator - разделитель (символ или сттрока)
int counts - кол-во разбиваемых елементов (0 - разбить всю строку)
[SIZE="4"][COLOR="DarkRed"]Пример:[/COLOR][/SIZE]
Код:
Memo1->Lines = _split("1111SEPARATOR22222SEPARATOR33333SEPARATOR", "SEPARATOR", 2);
Результат:
1111
22222
Код:
Memo1->Lines = _split(SomeTextBuff, "\n", 0);
Результат:
Разобьет весь текстовый буфер на строки и вернет TString result, ими заполненый...
З.Ы: сам мучился месяц пока не поборол свою лень и не написал =)
Всем сенкс и бб...