Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[c] file sequenziale

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[c] file sequenziale

Messaggioda sonep » mer lug 07, 2004 12:25 pm

se penso che non l'ho nemmeno capito io e devo spiegarlo!
comunque
sto costruendo un programma che dovrebbe trasferire i campi di un file sequenziale(creato in cobol) in un database...
io ho la lunghezza dei campi;
quindi ho pensato di prendermi l'intera riga e lavorarci su con substring, solo che il numero(che identifica la lunghezza del campo) che ho io(che fra l'altro è costante) è diverso da quello effettivo del file!
questo avviene perché vengono usati i <tab>!
bene quando il mio programma sul file incontra un <tab> lo riconosce come un unico carattere ma effettivamente, il <tab>, equivale ad 8 spazi(quindi caratteri!) e quindi nella variabile var vengono memorizzati sette caratteri di var2:
Es.

var0 = sr.ReadLine();
var = var0.Substring(0,9);//mettiamo che i primi 8 caratteri siano:
//"l<tab>" lui mi conta <tab> come 1 e prende anche var0.substring(8,8) che dovrebbero appartenere a var2
var2 = var0.substring(8,10);//qui chiaramente ripete un po' di var!!

quindi mi trovo sfalsato!
ho risolto inizialmente dichiarando nelle variabili

private string tab =" ";//l'equivalente del tab in c

e successivamente ho analizzato carattere per carattere e quando trovava il <tab> facevo avanzare un contatore di 8;
Es.

for (i=0;i<1;i++)
{
var = var0.Substring((x+k),1);
if (var==tab)
i=i+7;
varx= varx + var;
k++;
}
x=x+k;

ma anche questo non va perché può succedere che trovi 2 campi completamente vuoti e quindi il puntatore sfalsa!
spero abbiate capito il problema(o meglio che io mi sia fatto capire!)!
onestamente ho anche provato altre cose, ma è inutile postarle...visto che non hanno prodotto nessun tipo di risultato!
Avatar utente
sonep
Silver Member
Silver Member
 
Messaggi: 1017
Iscritto il: dom mag 11, 2003 5:18 pm
Località: Basilicata

Messaggioda Robby78 » mer lug 07, 2004 12:33 pm

nn sono sicuro di aver capito bene, ma se fai un

var0=replace(var0,tab," ");

e poi gestisci la var0 in maniera normale?

P.S. controlla la sintassi, nn sono molto pratico in c
Avatar utente
Robby78
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 3829
Iscritto il: gio gen 08, 2004 5:25 pm
Località: Emilia Romagna

Messaggioda sonep » mer lug 07, 2004 12:53 pm

è poco che lavoro in c....
quello che hai scritto sopra dovrebbe trasferire in var0 la stringa sostituendo i tab con " ". Giusto?
se fa questo non mi serve!
io ho una riga:

x00<tab>0r999<tab>

il cobol mi dice che la stringa è lunga 24(lo otteniamo da 3(x00)+8(<tab>)+5(0r999)+8(<tab>)
ma il mio programma mi da la stringa lunga come 10 (quindi 3+1+5+1)
il primo campo che a me serve e contenuto tra 0 e 3
quindi faccio
var=var0.substring(0,4);

tab in cobol(almeno per quanto ho capito) equivale ad 8 " ";
teoricamente dovrei avere var == a "x"+"0"+"0"+" "
in pratica ho var == a "x"+"0"+"0"+"<tab>"
Avatar utente
sonep
Silver Member
Silver Member
 
Messaggi: 1017
Iscritto il: dom mag 11, 2003 5:18 pm
Località: Basilicata


Messaggioda Robby78 » mer lug 07, 2004 1:09 pm

<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote"><i>Messaggio inserito da sonep</i>
<br />quello che hai scritto sopra dovrebbe trasferire in var0 la stringa sostituendo i tab con " ". Giusto?
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">

nono, cioè si... insomma io avevo messo 8 spazi tra le virgolette, ma quando posto ne lascia 1 solo... puoi sostituire il carattere tab anche con + caratteri, non necessariamente 1.

Quindi il risultato dovrebbe essere
"x00[8 spazi]0r999[8 spazi]"
che rispekkia l'originale giusto?
Avatar utente
Robby78
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 3829
Iscritto il: gio gen 08, 2004 5:25 pm
Località: Emilia Romagna

Messaggioda sonep » mer lug 07, 2004 2:46 pm

giusto....nn ci avevo pensato...
sl che c'è un'altro problema...!
infatti i tab non sempre occupano lo stesso spazio(lo si può notare scrivendo con il word pad!
se premo solo <tab> si andrà ad occupare un sl carattere e se andiamo a verificare la lunghezza di quella riga ci risulterà uguale ad 1;
se invece scrivo "ciao<tab>" si andranno ad occupare 5 caratteri ma nello stesso spazio...quindi nel primo caso il tab occupa 8 ma nel secondo solo 2!

p.s.mi sta venendo qualche ciclo in mente per ovviare....
ci penso bene, compilo e posto! ci sentiamo dopo!
Avatar utente
sonep
Silver Member
Silver Member
 
Messaggi: 1017
Iscritto il: dom mag 11, 2003 5:18 pm
Località: Basilicata

Messaggioda Robby78 » mer lug 07, 2004 2:59 pm

ok! [^] occhio xò a nn sbatterti x niente; se cobol tratta i tab come 8 spazi è probabile che non sia sensibile alla posizione del cursore come accade normalmente, è possibile che siano sempre 8 spazi nel file ma che poi ci pensi l'editor a visualizzare le info correttamente...
Avatar utente
Robby78
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 3829
Iscritto il: gio gen 08, 2004 5:25 pm
Località: Emilia Romagna

Messaggioda sonep » mer lug 07, 2004 3:23 pm

[weponed][weponed][weponed]grande.....[8D][8D][8D]

sono andato un po' in fusione ma ci sono riuscito:

for (i=0;i<40;i++)
{
var=rec.Substring((x+k),1);
if (var==tab)
{
t=1;
i=i+(40-(i+1));
}
else
benef=benef+var;
k++;
}
x=x+k;
k=0;
while (rec.Substring((x+k),1)==tab)
{
t=t+1;
k=k+1;
}
if ((t*8)<30)
{
for (i=0;i<30;i++)
{
var=rec.Substring((x+k),1);
if (var==tab)
{
t=1;
i=i+(30-(i+1));
}
else
indir=indir+var;
k++;
}
x=x+k;
k=0;
}
for (i=0;i<5;i++)
ecc.ecc.

che ne dici...[afro](ora che ci faccio caso...era una c*****a)

comunque nn c'è un editor che faccia visualizzare le informazioni una volta rielaborate....vengono trasmesse al db e poi non interrogate più per l'eternità!
Avatar utente
sonep
Silver Member
Silver Member
 
Messaggi: 1017
Iscritto il: dom mag 11, 2003 5:18 pm
Località: Basilicata

Messaggioda Robby78 » mer lug 07, 2004 3:36 pm

bella lì!! [^]
Avatar utente
Robby78
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 3829
Iscritto il: gio gen 08, 2004 5:25 pm
Località: Emilia Romagna


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising