Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг строки из файла, появляются \t в строке StringGrid 
V
    Опции темы
choodo
  Дата 2.9.2013, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.5.2007

Репутация: нет
Всего: 0



Сохраняю из StringGrid строки в файл, разделяя их по \t. Открываю снова, пропуская \t и \n, но в итоге что-то попадает и если начать редактировать ячейку, то перед содержимым стоит \t...

user posted image


Вот считывание файла:
Код

void __fastcall TForm1::Open1Click(TObject *Sender)
{
    //открыть тот самый текстовый файл - исходник
    OpenDialog1->Execute();
    if ( ( SourceFile = _wfopen(( OpenDialog1 -> FileName ).c_str(),L"rt,ccs=UNICODE")) == NULL )
        Application->MessageBox(L"По какой-то причине невозможно открыть файл", L"Ошибка!", MB_OK);
    else
    {
        wchar_t ch;
        String myrow = "";
        int i=1, j=1;// ибо по 0 - это fixed

        while((ch = fgetwc(SourceFile)) != WEOF)
        {
            if (ch == '\t') // если таб, то это следующая ячейка, тогда в текущую ячейку
            {                //поместим считанные символы
                            //увеличим столбик и обнулим строку, в которую считываем символы
                StringGrid1->Cells[i][j] = myrow;
                ++i;
                myrow = "";
            }

            if (ch == '\n') //если это перевод строки, то это новая строка
            {               //запишем ячейку, увеличим строку, добавим строку, скинем на 1 столбик, пронумеруем строку
                StringGrid1->Cells[i][j] = myrow;
                ++j;
                StringGrid1->RowCount = j;
                StringGrid1->Cells[0][j] = IntToStr(j);
                i = 1;     //скинем на 1й столбик курсор,  пронумеруем строку
                myrow = "";
            }
            myrow+=ch;//а вообще пока ни одно условие выше не выполнилось, мы наращиваем строку символами
        }
        fclose(SourceFile);
    }
}



Вот сохранение:
Код

void __fastcall TForm1::Saveas1Click(TObject *Sender)
{
    //SAVE AS!
    SaveSourceFileDialog ->Execute();
    if ( ( SourceFile = _wfopen(( SaveSourceFileDialog -> FileName ).c_str(),L"wt+,ccs=UNICODE")) == NULL )
        Application->MessageBox(L"По какой-то причине невозможно сохранить файл", L"Ошибка!", MB_OK);
    else
    {
        int rowcount = StringGrid1->RowCount-1;
        String str2file;
        for (int i = 1; i <= rowcount; i++)
        {
            str2file = StringGrid1->Cells[1][i] + "\t" + StringGrid1->Cells[2][i] + "\t" + StringGrid1->Cells[3][i]+"\n";
            //address    value    note
            fprintf(SourceFile,    "%S", str2file);
        }
        fclose(SourceFile);
    }
}


Подозреваю, что  делов wchar_t, не? Кто может подсказать? 
PM   Вверх
Riviero
Дата 3.9.2013, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 25.3.2010

Репутация: 2
Всего: 3



Цитата(choodo @  2.9.2013,  14:55 Найти цитируемый пост)
                myrow = "";


Ты обнуляешь строку, после помещения оной в ячейку,

Цитата(choodo @  2.9.2013,  14:55 Найти цитируемый пост)
            myrow+=ch


а потом приплюсовываешь туда символы таба и перевода строки.
Попробуй в if(ах) написать continue что ли.
PM MAIL   Вверх
choodo
  Дата 3.9.2013, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.5.2007

Репутация: нет
Всего: 0



Цитата(Riviero @  3.9.2013,  09:20 Найти цитируемый пост)
Попробуй в if(ах) написать continue что ли. 

ООО! точно! спасибо! Плюсанул бы, да постов не хватает!

p.s. Если кто будет на это смотреть, то предупреждаю сразу, что здесь мешанина из unicode и ansistring...

Это сообщение отредактировал(а) choodo - 3.9.2013, 10:16
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.