2009-12-18 10 views
0

En fait, je l'ouvris question précédemment,chaîne fonction split dans delphi

mais ne peut pas obtenir une réponse ce que je veux exactement, donc je voudrais demander à nouveau merci Tous

par exemple, j'ai un texte nom de fichier est « test.txt », et à l'intérieur le contenu du texte ressemble

hello all 
good day 
happy is 

et je veux modifier la source suivante pour itérer de premier indice de 'bonjour à tous je veux dire ..

si je clique ShowMessage (premier), alors je veux obtenir « bonjour » dans test.txt fichier,

et si cliquez ShowMessage (seconde) veulent alors obtenir « tous » et continuesly,

si je clique à nouveau showmessage (en premier), puis voulez obtenir «bon» et

cliquez à nouveau showmessage (deuxième) puis voulez obtenir «jour» que ce que je veux exactement.

Merci d'avance! et merci à tous ceux qui m'ont déjà aidé!

procedure TForm1.BitBtn1Click(Sender: TObject); 
var 
    list : TStringList; 
    first, second, third: string; 
begin 
    list := TStringList.Create; 
    try 
    list.Delimiter := #32; 
    list.LoadFromFile('test.txt'); 
    first := list[0]; 
    second := list[1]; 
    ShowMessage(first); 
    ShowMessage(second); 
    finally 
    list.Free; 
    end; 
end; 

Bonjour, vous pouvez modifier comme suit par exemple? Je veux utiliser showmessage (premier) et showmessage (deux), si tant est que j'apprécie!

procedure TForm1.BitBtn1Click(Sender: TObject); 

var 
    theFileStuff : tstringList; 
    oneLine  : tStringList; 
    x,y   : integer; 
begin 
    theFileStuff  := tStringList.Create; 
    oneLine   := tStringList.create; 
    oneLine.Delimiter := #32; 
    theFileStuff.LoadFromFile('test.txt'); 
    for x := 0 to theFileStuff.count-1 do 
    begin 
      oneLine.DelimitedText := theFileStuff[x]; 
      for y := 0 to oneLine.count-1 
      do 
      //ShowMessage(oneLine[y]); 
      ShowMessage(first); 
      ShowMessage(second); 

    end; 
    oneLine.Free; 
    theFileStuff.Free; 
end; 
+2

@ Paul: vous pouvez certainement penser à une façon de changer « ShowMessage (oneline [y]); » en "premier: = oneline [0]; second: = oneline [1]; ShowMessage (premier); ShowMessage (second);". Vous devez essayer de comprendre les choses vous-même et ne pas vous attendre à ce que tout le monde fasse tout pour vous. Vous n'apprendrez jamais de cette façon. –

+0

Bonjour à tous! J'ai été résolu, si sans l'aide d'autres peut-être que je ne pouvais pas le résoudre j'apprécie vraiment! merci encore :) – paul

Répondre

3

Essayez cette

procedure TForm1.ShowFields(Sender: TObject); 
var 
    theFileStuff : tstringList; 
    oneLine  : tStringList; 
    x,y   : integer; 
begin 
    theFileStuff  := tStringList.Create; 
    oneLine   := tStringList.create; 
    oneLine.Delimiter := #32; 
    theFileStuff.LoadFromFile('fileName'); 
    for x := 0 to theFileStuff.count-1 do 
    begin 
      oneLine.DelimitedText := theFileStuff[x]; 
      for y := 0 to oneLine.count-1 
      do ShowMessage(oneLine[y]); 
    end; 
    oneLine.Free; 
    theFileStuff.Free; 
end; 

Si vous savez qu'il n'y a que deux points par ligne, vous pouvez remplacer le code suivant:

for y := 0 to oneLine.count-1 
do ShowMessage(oneLine[y]) 

avec

ShowMessage(oneLine[0]); // First 
ShowMessage(oneLine[1]); // Second 

Mon code était plus générique pour gérer n'importe quel nombre d'éléments par ligne

+0

merci pour votre aide! J'ai été modifié certains le vérifieriez-vous? merci encore – paul

+1

@Paul: Vérifiez-le vous-même. Vous ne pouvez pas apprendre sans faire. –

+0

Bonjour merci encore! :) J'étais résolu maintenant! – paul

2

La propriété Delimiter n'a de sens que lors de l'utilisation de la propriété DelimitedText. Vous devrez utiliser 2 objets TStringList séparés pour ce que vous demandez, par exemple:

var 
    list, values : TStringList; 
    curListIdx, curValueIdx: Integer; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    curListIdx := -1; 
    curValueIdx := -1; 
    list := TStringList.Create; 
    values := TStringList.Create; 
    values.Delimiter := #32; 
end; 

procedure TForm1.FormDestroy(Sender: TObject); 
begin 
    list.Free; 
    values.Free; 
end; 

procedure TForm1.BitBtn1Click(Sender: TObject); 
var 
    S: String; 
begin 
    if curListIdx = -1 then 
    begin 
    list.LoadFromFile('test.txt'); 
    if list.Count = 0 then Exit; 
    curListIdx := 0; 
    end; 

    if curValueIdx = -1 then 
    begin 
    if curListIdx = list.Count then 
    begin 
     curListIdx := -1; 
     Exit; 
    end; 
    values.DelimitedText := list[curListIdx]; 
    Inc(curListIdx); 
    if values.Count = 0 then Exit; 
    curValueIdx := 0; 
    end; 

    S := values[curValueIdx]; 
    Inc(curValueIdx) 
    if curValueIdx = values.Count then curValueIdx := -1; 

    ShowMessage(S); 
end; 
+0

Bonjour Merci pour votre aide! Je veux modifier ce genre, voulez-vous m'aider – paul

+0

Remy, vous pouvez le faire avec un TStringList (SL) et une variable de chaîne. SL.LoadFromFile(), affectez SL.Text à la variable, puis affectez la variable dans SL.DelimitedText après avoir défini la SL.Délimiteur (et probablement SL.StrictDelimiter: = True). –