![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как очистить строки (s1,s2:string)? [D4, XP]
Катерина © (2005-11-12 19:34:00)Имеется произвольный 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 21:56:00) [1]добавьте после
if (OpenDialog1.Execute) then
begin
StringGrid1.colcount:=0;
StringGrid1.rowcount:=0;
Вот теперь работает.
Virgo_Style (2005-11-12 21:37:00) [2]А, видимо, я понял, в чем дело. Если было
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;
Катерина (2005-11-12 21:17:00) [3]да ну у меня же правда не работает!а если стереть ячейки так,чтобы в этой строке ячеек осталось меньше,чем в какой-либо другой,то остаток выводится.А как чистить StringGrid до записи?я просто писала s1:='';s2:='';
cvs (2005-11-12 21:08:00) [4]>Надо открыть файл именно в блокноте и,не закрывая проект,изменять и
>сохранять файл.
Всё равно работает нормально. Может дело в версии делфи? (У меня 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;
Virgo_Style (2005-11-12 21:00:00) [5]Катерина (12.11.05 20:58) [4]
Так и делал - запустил, открыл программой, открыл в блокноте, изменил, сохранил, открыл программой.
Катерина (2005-11-12 20:58:00) [6]Надо открыть файл именно в блокноте и,не закрывая проект,изменять и сохранять файл.
Virgo_Style (2005-11-12 20:47:00) [7]Хм, проверил - после изменения и повторной загрузки все меняется как надо...
Virgo_Style (2005-11-12 20:37:00) [8]По-моему, можно сделать немного проще:
StringGrid1.Rows[i].Delimiter:=';';
StringGrid1.Rows[i].DelimitedText:=S;
- и разбиение по колонкам произойдет автоматически.
Надо будет только читать строки и записывать их таким образом...
Попробуйте чистить StringGrid до записи, возможно, там остаются старые значения, хотя по идее - не должны.
cvs (2005-11-12 20:36:00) [9]У меня всё работае нормально, вот файл 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;
;;;;;;;;;;;;
;;;;;;;;;;;;
;;;;;;;;;;;;
;;;;;;;;;;;;