Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];

Вниз

Как очистить строки (s1,s2:string)?   Найти похожие ветки 

 
Катерина   (2005-11-12 19:34) [0]

Имеется произвольный csv-файл, написать программу для отображения содержимого файла в StringGrid.Вроде все работает,считывается правильно.Но если изменить исходный файл в блокноте не выходя из проекта,вернее удалить из него какие-то ячейки,то не работает все остается по-старому.по идее надо строки обнклить s1,s2.или может проблема в другом?Помогите пожалуйста!
вот программа для наглядности:
procedure TForm1.btnOpenClick(Sender: TObject);
var
 f: TextFile;
 S1, S2: string;
 i, j, k: integer;
begin
i := 0;
k := 0;
if (OpenDialog1.Execute) then
Begin
 s1 := " " ;{вот здесь загвоздка!}
 s2 := " " ;{вот здесь загвоздка!}
 StringGrid1.visible:=true;
 AssignFile (f, OpenDialog1.Filename);
 Reset(f);
 while not eof(f) do
 begin
    ReadLn (f, S1);
    Inc(i);
    j := 0;
    while Pos(";" , S1) <> 0 do
     begin
      s2 := Copy(S1,1,Pos(";", S1) -1);
      Inc(j);
      Delete (S1, 1, Pos(";", S1));
      StringGrid1.Cells[j-1, i-1] := S2;
     end;
   if Pos (";", S1) = 0 then
    begin
      Inc(j);
      StringGrid1.Cells[j-1, i-1] := S1;
    end;
  if k < j then k:=j;
   StringGrid1.ColCount := k;
   StringGrid1.RowCount := i;
 end;
end;
CloseFile(f);
end;


 
cvs   (2005-11-12 20:36) [1]

У меня всё работае нормально, вот файл cvs:

100;200;5;7;50;75;150
700;500;300;200;100;100;250
-100;;;;;;
test  55555555555555555555555555555555555555555555555555555555555555                                                             ;;;;;;
ttt;;;;;;
ggggggggggg;;-2;;;;
ddddd;;;;;;
1910;;;;;;
ИСТИНА;;;;;;

;kkk;mmm;;;;
abc;1;2;;;;
ddd;3;4;;;;
;5;;;;;

test  55555555555555555555555555555555555555555555555555555555555555                                                             ;;;;;;;

;ggg;;;;;;
;ddd;;;;;;

587;;;;;;;
;hhh;;;;;;

;;;"""---TEST--""";;;;
объединённые ячейки;;;;;;;
;;;;;;;
;;;;;;;
;;;;;;;
;;;;;;;
;;;;;;;;;;;;
;;;;;;;;;20.03.2003;11.09.2001;555;
;;;;;;;;;;;;
;;;;;;;;;;;;
;;;;;;;;;;;;
;;;;;;;;;;;;


 
Virgo_Style ©   (2005-11-12 20:37) [2]

По-моему, можно сделать немного проще:

StringGrid1.Rows[i].Delimiter:=";";
StringGrid1.Rows[i].DelimitedText:=S;

- и разбиение по колонкам произойдет автоматически.
Надо будет только читать строки и записывать их таким образом...

Попробуйте чистить StringGrid до записи, возможно, там остаются старые значения, хотя по идее - не должны.


 
Virgo_Style ©   (2005-11-12 20:47) [3]

Хм, проверил - после изменения и повторной загрузки все меняется как надо...


 
Катерина   (2005-11-12 20:58) [4]

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


 
Virgo_Style ©   (2005-11-12 21:00) [5]

Катерина   (12.11.05 20:58) [4]

Так и делал - запустил, открыл программой, открыл в блокноте, изменил, сохранил, открыл программой.


 
cvs   (2005-11-12 21:08) [6]

>Надо открыть файл именно в блокноте и,не закрывая проект,изменять и
>сохранять файл.

Всё равно работает нормально. Может дело в версии делфи? (У меня D3)

вот текст программы:

procedure TForm1.Button1Click(Sender: TObject);
var
 f: TextFile;
 S1, S2: string;
 i, j, k: integer;
begin

 i := 0;
 k := 0;
 if (OpenDialog1.Execute) then
 begin
   s1 := " ";
   s2 := " ";
   StringGrid1.visible := true;
   AssignFile(f, OpenDialog1.Filename);
   Reset(f);
   while not eof(f) do
   begin
     ReadLn(f, S1);
     Inc(i);
     j := 0;
     while Pos(";", S1) <> 0 do
     begin
       s2 := Copy(S1, 1, Pos(";", S1) - 1);
       Inc(j);
       Delete(S1, 1, Pos(";", S1));
       StringGrid1.Cells[j - 1, i - 1] := S2;
     end;
     if Pos(";", S1) = 0 then
     begin
       Inc(j);
       StringGrid1.Cells[j - 1, i - 1] := S1;
     end;
     if k < j then k := j;
     StringGrid1.ColCount := k;
     StringGrid1.RowCount := i;
   end;
 end;
 CloseFile(f);
end;


 
Катерина   (2005-11-12 21:17) [7]

да ну у меня же правда не работает!а если стереть ячейки так,чтобы в этой строке ячеек осталось меньше,чем в какой-либо другой,то остаток выводится.А как чистить StringGrid до записи?я просто писала s1:="";s2:="";


 
Virgo_Style ©   (2005-11-12 21:37) [8]

А, видимо, я понял, в чем дело. Если было
1;2;3;4;5,
а потом стало
1;2;3;4,
то ячейка с "5" просто не будет очищаться. в общем, вот мое предложение на базе [2]:

function DelimitersCount(S:String;Delimiter:char):integer;
var i:integer;
begin
Result:=0;
for i:=1 to Length(S) do  
 if S[i]=Delimiter then Inc(Result);
end;

procedure TForm1.Button2Click(Sender: TObject);
var S:TStrings;
i, items, maxitems:integer;
const Delimiter=";";
begin
if not OpenDialog1.Execute then exit;
maxitems:=1;
S:=TStringList.Create;
try
 S.LoadFromFile(OpenDialog1.FileName);
 StringGrid1.RowCount:=S.Count;
 for i:=0 to S.Count-1 do
 with StringGrid1 do
 begin
   Items:=DelimitersCount(S[i],Delimiter)+1;
   if maxitems<Items then maxitems:=Items;
   if ColCount<Items then
     ColCount:=Items;
   Rows[i].Delimiter:=Delimiter;
   Rows[i].DelimitedText:=S[i];
 end;
 StringGrid1.ColCount:=MaxItems;
finally
 S.Free;
end;
end;


 
cvs   (2005-11-12 21:56) [9]

добавьте после  
if (OpenDialog1.Execute) then
 begin

    StringGrid1.colcount:=0;
    StringGrid1.rowcount:=0;

Вот теперь работает.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.015 c
2-1131697453
Perf2k2
2005-11-11 11:24
2005.11.27
DateTimePicker - нужно, чтобы он был пустым


3-1129097530
erika
2005-10-12 10:12
2005.11.27
получении значения по дополнительной таблице


6-1124024764
NikNet
2005-08-14 17:06
2005.11.27
Как отправить/принять через WinSock свыше 1gb?


2-1131540149
max999
2005-11-09 15:42
2005.11.27
Вопрос на тему "иконка в трее" :)


14-1131332408
Карелин Артем
2005-11-07 06:00
2005.11.27
Еще вопрос по асе 3030315. Сколько может стоить она?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский