Newsgroup: it.comp.www.php
Titolo: Creazione file ASCII sequenziale?

Per esportare ordini da un e-commerce a un gestionale devo creare un file ascii sequenziale, ma non capisco alcune cose:
1. Guardando il file di esempio, sembra che tutti i dati devono stare su un'unica riga
2. ..quindi, visto che non sembrano esserci separatori di colonna, suppongo che ogni campo è 'paddato'
3. Con cosa paddo i campi?
Per paddare intendo che se il campo ha lunghezza 10 ma il dato è lungo 7, aggiungo 3 caratteri a sinistra (o destra)... io direi spazi bianchi, ma non ne sono sicuro (la documentazione fornita non ne parla proprio)
Avete esperienze in merito?
C'è un qualche carattere utilizzato di default come padding nei file ascii?
Mi confermate che deve essere di una singola riga?

 Per paddare intendo che se il campo ha lunghezza 10 ma il dato � lungo 7, aggiungo 3 caratteri a sinistra (o destra)... io direi spazi bianchi, ma non ne sono sicuro (la documentazione fornita non ne parla proprio)
str_pad() in php ovviamente

 Mi confermate che deve essere di una singola riga?
Dipende da cosa ci si aspetta dall'altra parte, ma di solito questi 
antenati dell'xml usavano semplici spazi.
Per quanto riguarda la singola riga dipende sempre da cosa ci si aspetta 
dall'altra parte, prova a aprirlo con un editor "inteligente" (cio� non 
notepad) per vedere se gli spazi ci sono o meno
-- 
g4b0, linux user n. 369000
http://brosulo.net

Bhè ovvio, io mi stavo costruendo una classe apposita 
http://pastebin.com/NPgSsJBy
Solo che non mi tornano alcune cose, se qualcuno lo ha già fatto e ha qualche suggerimento

Ho provato con molti editor (gedit, geany, komodo, etc..) e alcuni visualizzano gli spazi, altri caratteri strani.
Da terminale sembrano spazi

 Da terminale sembrano spazi
[sfogo]
Io odio google gruppi.
[/sfogo]
Allora sono spazi


3. Con cosa paddo i campi?
E' un po' un overkill, ma si mantiene molto bene:
$GestDef = array(
	'ID'	=> '%06d',
	'...'	=> '%-8d',
	...
);
Un semplice array_combine(array_keys($GestDef), array_values($TuoRecord))
ti crea un array associativo e verifica che la definizione sia giusta.
Per costruire la riga,
	while($rawrecord = SQLFetchTuple(...))
	{
		$Record = array_combine...
		// O se $rawrecord contiene tutti, ma non soli, i campi da
		// esportare, ed è un array associativo o può essere tale:
		// $Record = $rawrecord;
		$riga = '';
		foreach($GestDef as $field => $format)
			$riga .= sprintf($format, $Record[$field]);
		print $riga;
		print "\n";
	}
Nella man page di sprintf ci sono tutti i formati che puoi usare.
Leonardo
-- 
Surstangas via akcipitr', la ceval' fojnumas nur:
Jen vigla damo en brakum', kaj vi pensas pri forkur'?
Do li turnis sin, kaj turnis sin, kaj ekdormis sen singard';
Kaj lin apudis je l' vekigx, soldatoj kaj Barnard'.

Scusa non ho capito bene che intendi;
Non ho problema a creare il file, il mio problema è se effettivamente devo usare degli spazi come padding, se devo effettivamente paddare, e se effettivamente il file dovrà avere una sola riga (al contrario dei formati csv dove abbiamo una riga per dato e un separatore di colonna).



Questo te lo puo` dire solo chi ha scritto il software che poi dovra` 
leggere quel file.
Non ci sono "standard". Devi anche capire quale charset usera` (se hai 
accentate o caratteri strani).
Bye.

 Non ho problema a creare il file, il mio problema � se effettivamente devo usare degli spazi come padding, se devo effettivamente paddare, e se effettivamente il file dovr� avere una sola riga (al contrario dei formati csv dove abbiamo una riga per dato e un separatore di colonna).
Non � ben chiaro cosa intendi per "dato".
Se parli di esportazione da una tabella di database i termini
appropriati sono *righe* e *colonne* o al massimo "record" e "campi".
Nei file CSV ad ogni riga del file di testo corrisponde una riga della
tabella di database e le colonne sono separate da un separatore.
Anche nei file a lunghezza fissa ad ogni riga del file di testo
corrisponde una riga della tabella di database ma qui non c'� separatore
e le colonne occupano posizioni fisse (es. il codice cliente occupa le
posizioni da 1 a 8). Gli spazi inutilizzati sono riempiti col carattere
<spazio> (codice ASCII 32).
	Y.

 	Y.
Era questo il mio dubbio, capire se per "file ascii sequenziale" si intende uno a larghezza fissa.... il problema è che da quel che ho capito l'azienda che ha sviluppato il gestionale non è molto incline a dare informazioni in questo ambito, anche se non capisco perchè, tornerebbe tutto a loro vantaggio.

Il 07/07/11 12.37, Strae ha scritto:

Per i programmatori C un "file ascii sequenziale" è un semplice file 
ascii altrimenti si parla di file binario.