Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранить в файл содержимое StringGrid'а 
:(
    Опции темы
D3s
Дата 19.10.2010, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте!
Вопрос такой. Как из StringGrid в котором скажем столбцов 4 а строк 1, сохранить данные в файл. Но в примерно таком виде:
Название;ИД;шт;цена;Defender Byte;153-F00020;2;350 р

Если прямо, то мне нужно сохранять из TStringGrid to CSV с разделителем «;», в сети примеры есть, вернее их вроде всего 1-2, но в файл сохранения производятся как есть и получается бардак.

PM MAIL   Вверх
Frees
Дата 19.10.2010, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54





--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
D3s
Дата 19.10.2010, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Frees @ 19.10.2010,  09:23)
http://www.swissdelphicenter.ch/en/showcode.php?id=1743

Этот пример из тех двух что коряво 
Код

CSV := TStringList.Create;
    Try
      //Stringliste füllen
      For I := 0 To Grid.RowCount - 1 Do CSV.Add(Grid.Rows[I].CommaText);
      //CSV speichern
      CSV.SaveToFile(FileName);

записывают без разделителя   smile

Это сообщение отредактировал(а) D3s - 19.10.2010, 09:33
PM MAIL   Вверх
Frees
Дата 19.10.2010, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Код

  for I := 0 to Grid.RowCount - 1 do
  begin
// убрать комент если нужен другой разделитель
//    Grid.Rows[I].Delimiter := ';';
//    Grid.Rows[I].QuoteChar := '"';
    CSV.Add(Grid.Rows[I].DelimitedText);
  end



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Данкинг
Дата 19.10.2010, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Не понял, а почему нельзя в цикле собрать столбцы в строчку, разделяя их чем нужно, а затем записать в файл?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Frees
Дата 19.10.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(Данкинг @  19.10.2010,  12:36 Найти цитируемый пост)
Не понял, а почему нельзя в цикле собрать столбцы в строчку,

Grid.Rows[I] -  это уже TStrings зачем еще куда то собирать (I`тая строка собранная в TStrings )?

Это сообщение отредактировал(а) Frees - 19.10.2010, 09:41


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
D3s
Дата 19.10.2010, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Frees
Все замечательно работает, кроме двух но smile Строки в которых содержится пробел, он помещает в кавычки и каждую строку, код переносит а мне нужно что бы было все в одну строку. Конечно можно сделать например в пост обработочном коде удаление " и переносов, но это получится двойная работа, а каталоги порой будут достигать нескольких МБ.
PM MAIL   Вверх
Frees
Дата 19.10.2010, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(D3s @  19.10.2010,  14:07 Найти цитируемый пост)
он помещает в кавычки и каждую строку

это особенности CSV, если не использовать кавычки то не получится обратно разложить в том же виде как было(например если у тебя в ячейке уже написана ';').
если ты сделаешь все в 1 строку как отличишь где первая строка где вторая

от кавычек лучше не избавляться (но можно), а вот так тебе все в 1 строку будет
Код

  CSV.Clear;
  CSV.Add;
  for I := 0 to Grid.RowCount - 1 do
  begin
    CSV[0] := CSV[0] + Grid.Rows[I].Delimiter + (Grid.Rows[I].DelimitedText);
  end


Это сообщение отредактировал(а) Frees - 19.10.2010, 11:25


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
D3s
Дата 19.10.2010, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Frees @ 19.10.2010,  11:18)

Код

  CSV.Clear;
  CSV.Add;
  for I := 0 to Grid.RowCount - 1 do
  begin
    CSV[0] := CSV[0] + Grid.Rows[I].Delimiter + (Grid.Rows[I].DelimitedText);
  end


Не успел  smile  
Код

CSV[0] := CSV[0] + (StringGridTDT.Rows[I].DelimitedText);

Дело в том что выгрузка каталога из сайта, происходит именно по этой схеме. т.е. без переноса строки и как я понял ориентируется скрипт при выгрузке на количество столбцов. если к примеру их 4, то при загрузке скрипт будет в db каталога составлять следующим образом 
Код

for i:=0 to 3
 db.rowscount[i].AddText

Вот как то так вот

Другими словами - это шаблон
PM MAIL   Вверх
D3s
Дата 19.10.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Frees

а это куда
Код

  CSV.Clear;
  CSV.Add;


?

Может лучше сделать поочередно. Например читаем ячейку, записываем в TStrings ячейку + ; таким образом дойдя до конца строки, прыгаем, и снова читаем и записываем?

Это сообщение отредактировал(а) D3s - 19.10.2010, 12:12
PM MAIL   Вверх
Frees
Дата 19.10.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(D3s @  19.10.2010,  15:11 Найти цитируемый пост)
Может лучше сделать поочередно. Например читаем ячейку, записываем в TStrings ячейку + ; таким образом дойдя до конца строки, прыгаем, и снова читаем и записываем?

можно и так но без " ты рано можешь получить баг, если в значении ячейки будет ; то у тебя все сместиться..


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
D3s
Дата 19.10.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Frees @ 19.10.2010,  12:17)
Цитата(D3s @  19.10.2010,  15:11 Найти цитируемый пост)
Может лучше сделать поочередно. Например читаем ячейку, записываем в TStrings ячейку + ; таким образом дойдя до конца строки, прыгаем, и снова читаем и записываем?

можно и так но без " ты рано можешь получить баг, если в значении ячейки будет ; то у тебя все сместиться..

 smile 
PM MAIL   Вверх
Frees
Дата 19.10.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



во такие данные у тебя в гриде 8 колонок в колонке 4 вот такие данные  "Defender;Byte"
___________________________________________________
Название|ИД  |шт   |цена |Defender;Byte|  153-F00020|2|350 р|

сколько у тебя будет колонок если ты все сложишь просто через ;

у тебя получится
Название;ИД;шт;цена;Defender;<-это не разделитель а данные!>Byte;153-F00020;2;350 р 
сколько тут колонок?

Это сообщение отредактировал(а) Frees - 19.10.2010, 12:55


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
D3s
Дата 19.10.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Frees @ 19.10.2010,  12:54)
во такие данные у тебя в гриде 8 колонок в колонке 4 вот такие данные  "Defender;Byte"
___________________________________________________
Название|ИД  |шт   |цена |Defender;Byte|  153-F00020|2|350 р|

сколько у тебя будет колонок если ты все сложишь просто через ;

у тебя получится
Название;ИД;шт;цена;Defender;<-это не разделитель а данные!>Byte;153-F00020;2;350 р 
сколько тут колонок?

Fress  я тебя понял с самого начала но в прайсах, точки с запятой на моей практике еще не бывало, а вот кавычек чуть-ли не в каждом наименовании. Да и когда будет производится выгрузка на сайт программа будет сравнивать базы с прайсы с базами сайта и соответственно показывать несоответствия. В моей ситуации наверное проще обойтись простым без делимитера перечислением строк. Беда только очень долго не сидел в дельфях - пляж, рыбалка, пиво smile а теперь по работе надо все быстро сделать :(

Так конец или начало ячейки обозначается пробелом?  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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