我们说我有一个.txt文件,其中包含以下两行:
Item="1" Name="Sword" Damage="2.5"
Item="2" Name="Axe" Damage="3"
如何使用C?
将文本文件中Ax的伤害更改为3.5编辑:这就是我读取文本文件的每一行的方式,并且我用文本信息填充gtk列表存储,dhd_LocalizaItem是一个函数来获取" "例如Item =" 1&#34 ;,我将使用该函数捕获1,但是所有gtk的东西工作正常,正如我所说,我现在想要一个C函数/命令来编辑文本中某一行的特定部分文件。
void get_message() {
GtkTreeIter dhd_iter;
FILE * dhd_pFile;
char dhd_G_CodProduto[256];
char dhd_G_NomeProduto[256];
char dhd_contaItem[16];
char dhd_quantidade[32];
char dhd_valorItem[32];
char dhd_getbuf[1024];
dhd_chekDel = 0;
dhd_pFile = fopen ("Logs/logCancelar.txt", "r");
if(dhd_pFile == NULL) {
printf("Erro! Nao foi possivel abrir o log de cancelamento!\n");
}
else {
while( (fgets(dhd_getbuf, sizeof(dhd_getbuf), dhd_pFile))!=NULL ) {
dhd_LocalizaItem (dhd_getbuf, dhd_stringItem);
dhd_restou = dhd_LocalizaItem( "Item=" , dhd_getbuf);
strcpy(dhd_contaItem,dhd_restou);
dhd_LocalizaItem (dhd_getbuf, dhd_strong);
dhd_restou = dhd_LocalizaItem( "CodProduto=" , dhd_getbuf);
strcpy(dhd_G_CodProduto,dhd_restou);
dhd_LocalizaItem (dhd_getbuf, dhd_strung);
dhd_restou = dhd_LocalizaItem( "NomeProduto=" , dhd_getbuf);
strcpy(dhd_G_NomeProduto,dhd_restou);
dhd_LocalizaItem (dhd_getbuf, dhd_streng);
dhd_restou = dhd_LocalizaItem( "Quantidade=" , dhd_getbuf);
strcpy(dhd_quantidade,dhd_restou);
dhd_LocalizaItem (dhd_getbuf, dhd_stringTotal);
dhd_restou = dhd_LocalizaItem( "ValorTotal=" , dhd_getbuf);
strcpy(dhd_valorItem,dhd_restou);
gtk_list_store_append(GTK_LIST_STORE( mainWindowObjects.liststore ), &dhd_iter);
gtk_list_store_set(GTK_LIST_STORE( mainWindowObjects.liststore ), &dhd_iter,
ITEM, dhd_contaItem,
CODIGO, dhd_G_CodProduto ,
DESCRICAO, dhd_G_NomeProduto ,
QTD, dhd_quantidade,
VALOR, dhd_valorItem,
-1 );
}
}
fclose(dhd_pFile);
}
对不起我的坏人英语。
答案 0 :(得分:1)
#include <stdio.h>
#include <string.h>
typedef struct arms {
int id;
char name[32];
double damage;
} Arms;
int read_arms(Arms *a, FILE *fp){
return fscanf(fp, " Item=\"%d\" Name=\"%[^\"]\" Damage=\"%lf\"",
&a->id, a->name, &a->damage);
}
void write_arms(Arms *a, FILE *fp){
fprintf(fp, "Item=\"%d\" Name=\"%s\" Damage=\"%3.1f\"\n",
a->id, a->name, a->damage);
}
#define ARMSFILE "arms.dat"
void change_damage_by_name(const char *name, double damage){
FILE *fin, *fout;
Arms a;
fin = fopen(ARMSFILE, "r");
fout = fopen("arms.tmp", "w");
while(EOF!=read_arms(&a, fin)){
if(strcmp(a.name, name)==0)
a.damage = damage;
write_arms(&a, fout);
}
fclose(fin);
fclose(fout);
remove(ARMSFILE);
rename("arms.tmp", ARMSFILE);
}
int main(void){
change_damage_by_name("Axe", 3.5);
return 0;
}
答案 1 :(得分:-4)
可能尝试制作某种javascript脚本。我从未尝试在网站/ HTML / CSS之外制作脚本,但这是我的想法。
创建一个名为edit.js的文件 打开它[带]记事本,记事本++,或者某种编码编辑器。记事本有效,但我建议使用Notepad ++;免费。 实际上,JavaScript不允许编写,修改或编辑任何文件,只能读取它们;这是出于安全[并且可能是合法的]原因。所以这就是我的建议:
第一步:将您的文本文件和新的javascript文件上传到在线托管,或者如果我能正确地思考这个问题,只需将其放在硬盘上的文件夹中即可。
将文本文件转换为.html
格式,可以通过以下方式完成:
另存为&gt;文件类型:所有文件类型&gt;文件名:mytextdocument.html
并使用记事本做同样的事情,用它创建一个.js
文件。
html文件应包含一些内容。
<html>
<head>
<title>My Text Document</title>
<script src="myscript.js"></script>
</head>
<body id="body" onLoad="replaceItem(); saveTextAsFile();">
<div id="content">
<ul>
<li id="1" value="sword">Item="1" Name="Sword" Damage="2.5"</li>
<li id="2" value="axe">Item="2" Name="Axe" Damage="3"</li>
</ul>
</div>
</body>
</html>
.js
文件应该是这样的;
function replaceItem() {
var x = document.getElementById("2");
x.innerHTML = "Item='2' Name='Axe' Damage='3.5'";
}
function saveTextAsFile()
{
var textToWrite = document.getElementById("content").innerHTML;
var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'});
var fileNameToSaveAs = "items.txt";
var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = "Download File";
if (window.webkitURL != null)
{
// Chrome allows the link to be clicked
// without actually adding it to the DOM.
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
}
else
{
// Firefox requires the link to be added to the DOM
// before it can be clicked.
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick = destroyClickedElement;
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
}
downloadLink.click();
}