Avatar billede jokro Nybegynder
07. februar 2003 - 22:22 Der er 16 kommentarer og
1 løsning

Adskille tekst ved komma???

Jeg har en tekst fil, den ser sådan ud:
ML,34041202,113,20020115,20020116,2425,00000,5004,+,000001326425
ML,34041202,113,20020115,20020116,2425,00000,5019,+,000000190300

Det er kun nogle af værdierne jeg skal bruge, f.eks efter det 7. komma i første linje (5004), men hvordan får jeg tekstfilen skilt ad??

Tak på forhånd..

Mvh. Johnny
Avatar billede razersedge Nybegynder
07. februar 2003 - 22:33 #1
Dette skulle gøre det:

var
i : Integer;
RUNNING : boolean;
str, str_1 : String;
begin

Str := Edit1.Text;
while (RUNNING) do begin
  i:=pos(',',Str);
  if (i<>0) then begin
    Str_1 := Trim(Copy(Str,1,i-1));
    Delete(Str,1,i);
    Memo1.Lines.Add(Str_1);
  end else begin
    if (Length(Str) > 0) then begin
      Str_1 := Trim(Str);
      Delete(Str,1,Length(Str));
      Memo1.Lines.Add(Str_1);
    end;

    RUNNING := FALSE;
  end;
  i := pos(',',Str);
end;

end;
Avatar billede razersedge Nybegynder
07. februar 2003 - 22:35 #2
Kan du selv tilpasse det til dit behov? ellers skal jeg lige have at vide hvad det præcist skal gøre, ud over at dele mellem kommaer. Du kan evt. smide de splittede dele i et array e.l. og derefter behandle hver enkelt stykke.
Avatar billede jokro Nybegynder
07. februar 2003 - 22:45 #3
Det kunne være godt hvis du kunne ligge dem i array's, forresten står teksten ikke i en edit, men i et tekstdokument. (Data.txt)
Avatar billede razersedge Nybegynder
07. februar 2003 - 22:47 #4
Okay, det fixer jeg lige så.
Avatar billede razersedge Nybegynder
07. februar 2003 - 22:59 #5
Er dette noget du kan bruge så:

var
i : Integer;
RUNNING : boolean;
str, str_1 : String;

F : TextFile;
Buffer : String;

strArray : Array of String;
begin
SetLength(strArray,0);

AssignFile(F,'C:\exp.txt');
Reset(F);
While NOT EOF(F) do begin
  ReadLn(F,Buffer);

        Str := Buffer;
        RUNNING := TRUE;

        while (RUNNING) do begin
          i:=pos(',',Str);
          if (i<>0) then begin
              Str_1 := Trim(Copy(Str,1,i-1));
              Delete(Str,1,i);

              SetLength(strArray,Length(strArray)+1);
              strArray[High(strArray)] := str_1;
          end else begin
              if (Length(Str) > 0) then begin
                Str_1 := Trim(Str);
                Delete(Str,1,Length(Str));

                SetLength(strArray,Length(strArray)+1);
                strArray[High(strArray)] := str_1;
              end;

              RUNNING := FALSE;
          end;
        end;        //End of if(RUNNING)

end; // End of EOF loop

//Kun til lige at teste, alle bliver skrevet ud her.
for i:=0 to High(strArray) do begin
    Memo1.Lines.Add(strArray[i]);
end;
//-------------

end;





Erstat bare filnavnet, og det skulle køre
Avatar billede jokro Nybegynder
07. februar 2003 - 23:07 #6
Jeg forstår det ikke helt, hvordan kan jeg så hente værdien efter det 7. komma i nr. 2 linje??
Avatar billede razersedge Nybegynder
07. februar 2003 - 23:13 #7
Ved du hvor mange værdier der er i hver linie? Hvad kender du i filen?
Avatar billede jokro Nybegynder
07. februar 2003 - 23:28 #8
Der er 10 værdier i  filen, de 2 første linjer ser sådan her ud:

ML,34041202,113,20020115,20020116,2425,00000,5004,+,000001326425
ML,34041202,113,20020115,20020116,2425,00000,5019,+,000000190300
Avatar billede jokro Nybegynder
07. februar 2003 - 23:31 #9
De værdier som jeg er intereseret i er nr 4,5,8 og 10, og det er i alle linjer..
Avatar billede razersedge Nybegynder
07. februar 2003 - 23:31 #10
så er det vel bare at vælge array index nr. 16 (dvs værdi nr 17, da 0 er nr. 1)
Avatar billede jokro Nybegynder
07. februar 2003 - 23:33 #11
Kan man ikke gøre det på en eller anden smart måde, i stedet for at skrive 7,17,27,37 osv.? Jeg skal jo have for alle linjerne...
Avatar billede razersedge Nybegynder
07. februar 2003 - 23:36 #12
Du kan vel sætte nogle variabler (4 stks) til hver af de fire værdier, smide det i en lykke, og lade den ligge 10 til hver variabel.
Avatar billede jokro Nybegynder
07. februar 2003 - 23:41 #13
Kan du ikke komme med et eks, så for du også de 150 point...

:o)

Mvh. Johnny..
Avatar billede jokro Nybegynder
07. februar 2003 - 23:59 #14
Jeg har selv fundet ud af det, mange tak for de gode svar..
Avatar billede razersedge Nybegynder
08. februar 2003 - 00:00 #15
så, dette skulle gøre det:

var
i : Integer;
RUNNING : boolean;
str, str_1 : String;

F : TextFile;
Buffer : String;

strArray : Array of String;

AntalLinier : Integer;
v1,v2,v3,v4 : Integer;
begin
SetLength(strArray,0);
AntalLinier := 0;

AssignFile(F,'C:\exp.txt');
Reset(F);
While NOT EOF(F) do begin
  ReadLn(F,Buffer);
  Inc(AntalLinier);

        Str := Buffer;
        RUNNING := TRUE;

        while (RUNNING) do begin
          i:=pos(',',Str);
          if (i<>0) then begin
              Str_1 := Trim(Copy(Str,1,i-1));
              Delete(Str,1,i);

              SetLength(strArray,Length(strArray)+1);
              strArray[High(strArray)] := str_1;
          end else begin
              if (Length(Str) > 0) then begin
                Str_1 := Trim(Str);
                Delete(Str,1,Length(Str));

                SetLength(strArray,Length(strArray)+1);
                strArray[High(strArray)] := str_1;
              end;

              RUNNING := FALSE;
          end;
        end;        //End of if(RUNNING)

end; // End of EOF loop

//Kun til lige at teste, alle bliver skrevet ud her.
//for i:=0 to High(strArray) do begin
    //Memo1.Lines.Add(strArray[i]);
//end;
//-------------

//---------------
//Starter ved de valgte nedenfor
//ligger derefter 10 til, fortsætter indtil alle linier er kørt igennem.
v1 := 3;
v2 := 4;
v3 := 7;
v4 := 9;
for i:=1 to AntalLinier do begin
    Memo1.Lines.Add(strArray[v1]);
    Memo1.Lines.Add(strArray[v2]);
    Memo1.Lines.Add(strArray[v3]);
    Memo1.Lines.Add(strArray[v4]);
    v1 := v1 +10;
    v2 := v2 +10;
    v3 := v3 +10;
    v4 := v4 +10;
end;
//-------------

end;
Avatar billede razersedge Nybegynder
08. februar 2003 - 06:39 #16
Hov.. jeg var da vist ikke helt frisk igår, filen skal selvfølgeligt lukkes efter brug.

dvs, indsæt CloseFile(F); efter denne linie:  end; // End of EOF loop
Avatar billede athlon-pascal Juniormester
08. februar 2003 - 22:44 #17
Brug StringList.CommaText, det er nemmere:

var
  Form1: TForm1;
  CommaStrList: TStringList;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  Fil: TextFile;
  Str, CommaStr: String;
begin
  AssignFile(Fil, 'C:\exp.txt');
  Reset(Fil);
  if not EOF(Fil) then
    ReadLn(Fil, CommaStr);

  while not EOF(Fil) do
  begin
    ReadLn(Fil, Str);
    CommaStr := CommaStr + ',' + Str;
  end;
  CloseFile(Fil);
  CommaStrList := TStringList.Create;
  CommaStrList.CommaText := CommaStr;
  Caption := CommaStrList[7]; //5004
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  CommaStrList.Free;
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester