Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 38
  1. #1

    [Delphi] Stringhe in una String Grid caricate male

    ciao a tutti,
    pre-saluto alka perchè non so com'è ma credo gli stiano già fischiando le orecchie mentre scrivo...

    il codice che ho creato è questo:
    codice:
    var Data: TextFile;
        r: integer;
        c: integer;
        f1: string;
        f2: string;
    begin
      AssignFile(Data, ExtractFilePath(ParamStr(0)) + 'libreria\tabelle.dll');
      Reset(Data);
      r := 0;
      with sf do begin
      with TabellaOggetti do try
        while not EOF(Data) do
          begin
            inc(r);
            RowCount := r+1;
            c := -1;
            while not EOLn(Data) do
              begin
                if c = 0 then
                  Read(Data, f1)
                else Read(Data, f2);
                  inc(c);
                if c+1 > ColCount then
                  ColCount := c+1;
                if c = 1 then
                  Cells[c,r] := (f1)
                else Cells[c,r] := (f2);
              end;
            ReadLn(Data);
          end;
      finally
      CloseFile(Data);
      end;
    il concetto è che dal file TABELLE.DLL il programma dovrebbe estrarre i contenuti saparati da tabulazione e creare la tabella di conseguenza...
    solo che NON lo fa!!!!

    incecec di prelevare il testo e mettere una parte della strtinga in una cella e l'altrta parte, separata dalla tabulazione, in un'altra, mi mette tutto nella stesa riga visualizzando il controllo tabulazione come un "|"

    esempio:
    TABELLE.DLL
    NOME [] COGNOME
    Mario[]Rossi
    Gino[]Banco
    (dove il carattere [] è la tabulazione)

    la String grid viene compilata
    |__________________|_______|
    NOME|COGNOME
    Mario|Rossi
    Gino|Banco

    mentre:
    1) Nome e Cognome dovrebbero apparire nelle Fixed superiori
    2) Nomi e Cognomi dovrebbero essere separati nelle rispettive colonne

    che cavolo succede?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Non vedo alcun riferimento al carattere di tabulazione nel tuo codice...da dove proviene?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    ehi, scusa per l'intempestività, ,ma non ricevo le notifiche.

    non ho cpaito la domanda....

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Il carattere di tabulazione che dici di utilizzare nel caricamento del file non appare da nessuna parte nel codice di salvataggio.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    :tongue: :tongue:

    grazie.
    cmq ho risolto in un altro modo, manipolando con il comando Copy(..) le stringhe ed obbligandole nelle celle

  6. #6
    in realtà mi sono accorto di non aver risolto praticamente nulla.

    ho un file di testo scritto così:

    Valore1|Valore2|Valore3|Valore4|Valore5

    avevo pensato ad un codice del genere:
    codice:
    var Data: TextFile;
        r: integer;
        c: integer;
        testo,parte1,parte2,parte3,parte4,parte5:string;
        delimiter:string;
        parte:string;
    begin                               //carica il file di testo delimitato
          assignfile(data, ExtractFilePath(ParamStr(0)) + 'libreria\tavola1.dll'); 
          reset(data);
          GrigliaOggetti.ColCount:=5;
          GrigliaOggetti.ColWidths[0]:=150;
          GrigliaOggetti.ColWidths[1]:=120;  //Ridimensiona una colonna specifica alla
          while not eoln(data) do           //larghezza desiderata!!!
            begin
              read(data,testo);
              parte1:=copy(testo,1, pos(listaoggetti.items.Delimiter,testo)-1);
              parte2:=copy(testo, pos(listaoggetti.items.Delimiter,testo)+1, pos(listaoggetti.items.Delimiter,testo)+1);
              parte3:=copy(testo, pos(listaoggetti.items.Delimiter,testo)+1, Length(testo));
              ListaOggetti.AddItem(parte1+'     '+parte2,Sender);
              GrigliaOggetti.Cells[c+1,r]:=parte2;
              GrigliaOggetti.Cells[c,r]:=parte1;
              GrigliaOggetti.Cells[c+2,r]:=parte3;
              readln(data);
              r:=r+1;
              GrigliaOggetti.RowCount:=r;
            end;
    cioè: preleva una stringa intera.
    leggila e copia la prima parte, fino al primo delimitatore, nela variabile parte1
    leggi dal secondo delimitatore al terzo e compialo nella variabile parte2 e così via...
    poi scrivi queste parti nelle righe della TStringGrid grigliaOggetti....

    solo che la procedura funziona solo fino al primo delimitatore, dal secondo in poi, tutto viene copiato in un'unica riga, come se non vi fossero altri delimiter...

    come mai?

    alka, ti prego torna da me!

  7. #7
    please....

  8. #8
    up....

    sono desperado

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Per il Galateo dell'uso del forum, credo che un messaggio di esortazione alla risposta dopo una ventina di minuti dalla richiesta di aiuto sia eccessivo e irritante, dato che chi risponde al forum lo fa se ha la risposta pronta e se ne ha voglia, ammesso che ne abbia addirittura la possibilità.

    Quando si risponde ad un messaggio, viene inviata una mail di notifica...dopodichè, si possono inserire anche 20000 "please" che l'effetto ottenuto è sicuramente nullo, anzi contrario a quello che si desidera.

    A parte questo, non ho analizzato tutto il codice che hai postato, ma mi sembra che l'errore sia ben evidente.

    Quando usi la funzione Pos, puoi specificare anche da quale posizione iniziare a ricercare la sottostringa o il carattere interessato.
    Nel tuo caso, siccome devi ricercare un delimitatore e tutti i successivi, ad ogni uso della funzione Pos devi memorizzarti il valore restituito da specificare come punto di partenza per la chiamata successiva alla medesima funzione, altrimenti la ricerca parte sempre dall'inizio.

    L'errore è comunque facilmente individuabile eseguendo il programma passo passo e ponendo un breakpoint (punto di arresto) sulla prima esecuzione in cui appare la chiamata alla funzione Pos: il valore di posizione che passi come parametro Index dalla seconda chiamata alla funzione Pos in poi è sempre uguale.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da Lyll0
    up....
    sono desperado
    Per la valenza di questo messaggio, leggi quello che ti ho scritto nel precedente.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.