Главная страница
    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.013 c
4-1127753609
NikNet
2005-09-26 20:53
2005.11.27
Где взять модули ole2, olectl


2-1131710736
Кирилл_
2005-11-11 15:05
2005.11.27
ПОМОГИТЕ ПЛЗ.


3-1129176875
Рафик
2005-10-13 08:14
2005.11.27
MSSQL Dependencies


2-1131531380
DelphiLexx
2005-11-09 13:16
2005.11.27
TFIBQuery


2-1131608134
Wano
2005-11-10 10:35
2005.11.27
Запрос Access не работает в delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский