Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Vytvoreni xml z textoveho souboru - nejsnadnejsi zpusob?

Ahoj,

chtel jsem pozadat o nakop, v cem by bylo nejsnadnejsi zrealizovat toto:

- mam textove soubory ve formatu:

   G0010    12169.000000000     4397.062500000  -800143.000000000 -1131261.503906000      595.693000000 
   G0008    10870.500000000    11456.468800000  -801458.250000000 -1135380.219000000      550.239000000 
   G0009    10429.000000000    36643.875000000  -803682.500000000 -1150296.000000000      695.614000000 
   ...

- potrebuji tato cisla nasoukat do xml tagu (pro kazdy radek z textaku):

  <Control_Point_Data>
     <Control_Point_ID>G0010</Control_Point_ID>
     <Control_Point_X_Value>-800143.000000000</Control_Point_X_Value>
     <Control_Point_Y_Value>-1131261.503906000</Control_Point_Y_Value>
     <Control_Point_Z_Value>595.693000000 </Control_Point_Z_Value>
  </Control_Point_Data>

No napada mne zneuzit utrzky z http://pc.poradna.net/question/view/125870-cteni-a- zapis-z-do-externiho-souboru-na-www-strance a trochu se potrapit s JavaScriptem, ale chtel jsem se zeptat, zda by nebylo bezbolestnejsi reseni.

Dekuju za rady, M.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Ja by som si na to vybral C++ alebo C#. Ale je to úloha, na ktorú si môžeš zvoliť takmer ktorýkoľvek… nový
los 20.07.2007 22:14
los
Bylo mi jasný, že jakmile si tenhle thread přečte los, mám po kšeftu. :.(;-) nový
host 20.07.2007 22:22
host
Clovece lose (lze li to tak rici), ty musis mit nejaky budicek na tyhle dotazy tykajici se programov… nový
Mrak 20.07.2007 22:28
Mrak
Připojím se s JScriptem fs = new ActiveXObject("Scripting.FileSystemObject"); source = fs.GetFile("… nový
Mitch 20.07.2007 22:33
Mitch
No take diky :-), tak jeste C++, PHP, C# a budu to mit skoro vsechno... Jeste bych mel jeden dotaz -… nový
Mrak 20.07.2007 22:44
Mrak
C# a PHP bych dal, s C++ to bude horší:-) Tohle mi přije dobrý v tom, že nepotřebuješ kompilátor ani… nový
Mitch 20.07.2007 22:53
Mitch
Dekuju za odpoved. Tak jeste dovol jeden dotaz - pokud tam misto tabulatoru jsou mezery (coz jsem na… nový
Mrak 20.07.2007 23:01
Mrak
Jo, pomocí regulárního výrazu nahradit libovolný počet mezer jedním znakem - třeba jednou mezerou. T… nový
Mitch 20.07.2007 23:17
Mitch
:beer:. M. nový
Mrak 20.07.2007 23:19
Mrak
objects = line.replace(/ +/g,";").split(";"); replace(/ +/g,";") každá sekvence minimálně jedné a m… nový
Mitch 20.07.2007 23:25
Mitch
Super. Dovolil jsem si tam malou upravu v tom regularnim vyrazu (pouzil jsem vyraz losa), protoze r… nový
Mrak 20.07.2007 23:45
Mrak
Jo oni jsou ještě mezery na začátku. Tak ty jsem při ukládání ke mě do souboru nekompromisně odstran… poslední
Mitch 20.07.2007 23:50
Mitch

Ja by som si na to vybral C++ alebo C#. Ale je to úloha, na ktorú si môžeš zvoliť takmer ktorýkoľvek jazyk, napr. JavaScript:

function transform(text) {
  var lines = text.split("\n");
  var results = [];
  
  for (var i = 0; i < lines.length; ++i) {
    var values = lines[i].replace(/^\s+|\s+$/g, "").split(/\s+/);
    
    results.push(
      "<Control_Point_Data>\n" +
      "  <Control_Point_ID>" + values[0] + "</Control_Point_ID>\n" +
      "  <Control_Point_X_Value>" + values[3] + "</Control_Point_X_Value>\n" +
      "  <Control_Point_Y_Value>" + values[4] + "</Control_Point_Y_Value>\n" +
      "  <Control_Point_Z_Value>" + values[5] + "</Control_Point_Z_Value>\n" +
      "</Control_Point_Data>\n");
  }
  
  return results.join("");
}

Clovece lose (lze li to tak rici), ty musis mit nejaky budicek na tyhle dotazy tykajici se programovani. At uz jsou to VB, VBA makra v MS Office ci takoveto vymysly, jako ted ja, asi uz ty kody mas predpripraveny nebo vimjaco. No nechci nikomu lizt do zadku, ale mate muj obdiv (vcetne tacuda, hosta a asi i dalsich, kteri jiz nejednou takhle promptne a "na zakazku" pomohli).
M.

Připojím se s JScriptem

fs = new ActiveXObject("Scripting.FileSystemObject");
source = fs.GetFile("source.txt");
dest = fs.CreateTextFile("dest.xml", true);

filestream = source.OpenAsTextStream(1, 0);

while(!filestream.AtEndOfStream)
{
   line = filestream.ReadLine();
   objects = line.split(String.fromCharCode(9));
   
   dest.writeline("<Control_Point_Data>");
   dest.writeline(" <Control_Point_ID>"+objects[0]+"</Control_Point_ID>");
   dest.writeline(" <Control_Point_X_Value>"+objects[3]+"</Control_Point_X_Value>");
   dest.writeline(" <Control_Point_Y_Value>"+objects[4]+"</Control_Point_Y_Value>");
   dest.writeline(" <Control_Point_Z_Value>"+objects[5]+"</Control_Point_Z_Value>");
   dest.writeline("</Control_Point_Data>");
}
 
filestream.Close();
dest.Close();

Počítá se s tím že ten soubor s daty se jmenuje "source.txt" a data jsou oddělené tabelátorem. <?xml... a další věci už není problém přidat.

No take diky :-), tak jeste C++, PHP, C# a budu to mit skoro vsechno...
Jeste bych mel jeden dotaz - radkem:

objects = line.split(String.fromCharCode(9));

definujes oddelovnik - "9" je kod pro tabulator, pokud by v souboru byly mezery, dalo by se tam "32"?

Dikanc, M.

C# a PHP bych dal, s C++ to bude horší:-) Tohle mi přije dobrý v tom, že nepotřebuješ kompilátor ani server s PHP.

definujes oddelovnik - "9" je kod pro tabulator, pokud by v souboru byly mezery, dalo by se tam "32"?

Přesně, ale s mezerníkem by bylo přehlednější

objects = line.split(" ");

Ono to tak funguje i s tabelátorem, ale vypadá to jako několik mezer tak jsem radši zvolil zápis kódem.

Super. Dovolil jsem si tam malou upravu v tom regularnim vyrazu (pouzil jsem vyraz losa), protoze

replace(/ +/g,";")

diky mezere na zacatku radku vlozilo i strednik na zacatek a tagy byly vuci textu o jedno posunute.

Takto to funguje k me spokojenosti:

fs = new ActiveXObject("Scripting.FileSystemObject");
source = fs.GetFile("source.txt");
dest = fs.CreateTextFile("dest.xml", true);

filestream = source.OpenAsTextStream(1, 0);

while(!filestream.AtEndOfStream)
{
   line = filestream.ReadLine();
   objects = line.replace(/^\s+|\s+$/g, "").split(/\s+/);
   
   dest.writeline("<Control_Point_Data>");
   dest.writeline(" <Control_Point_ID>"+objects[0]+"</Control_Point_ID>");
   dest.writeline(" <Control_Point_X_Value>"+objects[1]+"</Control_Point_X_Value>");
   dest.writeline(" <Control_Point_Y_Value>"+objects[2]+"</Control_Point_Y_Value>");
   dest.writeline(" <Control_Point_Z_Value>"+objects[3]+"</Control_Point_Z_Value>");
   dest.writeline("</Control_Point_Data>");
}
 
filestream.Close();
dest.Close();

Jeste jednou vsem velice dekuji :beer: + :beer: + :beer:.
M.

Zpět do poradny Odpovědět na původní otázku Nahoru